VeraCrypt icon indicating copy to clipboard operation
VeraCrypt copied to clipboard

For Mac, have the option to use FUSE-T

Open dfloyd888 opened this issue 1 year ago • 28 comments

Desired behavior

Please add, as an option for macOS, the ability to use FUSE-T. FUSE-T is similar to FUSE, but instead of presenting volumes directly to the OS, it presents them as loopback mounted NFS v4 volumes. Since FUSE-T requires no kernel extensions, it is easier to maintain for MacOS's constantly changing kernel space, and that one has to go into recovery mode to select a lower security option for FUSE, while FUSE-T doesn't require this.

Additional information

FUSE-T's website: https://www.fuse-t.org/

Your Environment

Please tell us more about your environment

VeraCrypt version: VeraCrypt 1.25.9

Operating system and version: macOS 13.3.1

System type: arm64

dfloyd888 avatar Apr 26 '23 01:04 dfloyd888

+1 to this issue. FUSE-T markets itself as a "Drop-in replacement for osxfuse," so even though I haven't looked at the VeraCrypt code, I can't imagine that the implementation would be very difficult.

Since VeraCrypt aims to be transparent, I also think that it's problematic that both MacFUSE and FUSE-T are closed-source programs, but I suppose that's a different discussion.

ZelnickB avatar Sep 05 '23 00:09 ZelnickB

Well, it will work with minor changes to veracrypt, the developer of Fuse-T did compile and tested it with minor changes.

arifzeeshan avatar Oct 01 '23 10:10 arifzeeshan

It is indeed becoming harder to configure macFUSE on recent macOS versions for non-technical users. This limits the userbase of VeraCrypt and supporting Fuse-T is a solution to this problem.

Thank you @arifzeeshan for sharing the confirmation of Fuse-T author that minimal changes are needed to make it compatible. He didn't share these changes but I give it a try in the coming weeks and see how it goes.

idrassi avatar Oct 01 '23 11:10 idrassi

Looking forward to the changes and since Fuse-T runs on a userspace, hope we will also have a portable version too.

arifzeeshan avatar Oct 01 '23 12:10 arifzeeshan

Could you please provide an update on the progress made in this area? Any details on the specific changes implemented or the overall experience in integrating Fuse-T with VeraCrypt would be greatly appreciated. Thank you again for your efforts and for sharing this information!

shadofficial avatar Nov 19 '23 09:11 shadofficial

@idrassi Do you have a progress update on this feature?

ZelnickB avatar Jan 11 '24 17:01 ZelnickB

Seems that Fuse-t author recently posted his changes to VeraCrypt here.

keresztg avatar Jan 29 '24 23:01 keresztg

@idrassi What steps are necessary before macos-fuse-t/VeraCrypt can be merged into the main VeraCrypt repository?

ZelnickB avatar Feb 24 '24 22:02 ZelnickB

@idrassi thank you for your great work. It looks as if the PR from the Fuse-T repo is rather straight forward. Could you at least merge it into a new feature branch so that it gets some exposure and can be tested by the brave folks here? Thank you!

fortiko avatar Mar 22 '24 17:03 fortiko

Any update on this? Would be great to have this option, I don't want to mess with kernel extensions on my new M1 machine.

beatschubser avatar May 04 '24 20:05 beatschubser

@beatschubser I believe that this is being held up by #1276 right now—see this comment.

ZelnickB avatar May 04 '24 22:05 ZelnickB

I have finally merged https://github.com/veracrypt/VeraCrypt/pull/1276 and added some enhancements on top of it. I’m now looking into fuse-t support. I have reviewed the changes proposed by the fuse-t author in https://github.com/macos-fuse-t/fuse-t/issues/11, and they indeed look simple.

I will implement the changes to create a fuse-t build and share it here for testing.

idrassi avatar Jun 16 '24 19:06 idrassi

I have added FUSE-T support to VeraCrypt in this commit: https://github.com/veracrypt/VeraCrypt/commit/edde1d45f6de3e71b585b92e0e06d7499735c238

There was an issue that caused volumes not to mount the first time they are used, and it took time to figure out the cause and the fix. It turns out that FUSE-T is slower in making the content of the mounted volume control file available compared to MacFUSE, so I had to add a waiting loop (250 ms for each loop) in order for the mounted content to be accessible. You can see the loop here: https://github.com/veracrypt/VeraCrypt/commit/edde1d45f6de3e71b585b92e0e06d7499735c238?diff=split&w=0#diff-c700f1c203f50e9d8f52601149b2406b97501ce983d57afa1ad5a61a22bfe3c5R303

Another issue is that FUSE-T libraries are built in such a way that they target only macOS Sonoma (14.0), while VeraCrypt targets macOS Monterey as the minimum version. I don't know if this was done on purpose and macOS Ventura and Monterey are not supported by FUSE-T. So for now, we get this warning during the linking of VeraCrypt:

ld: warning: dylib (/usr/local/lib/libfuse-t.dylib) was built for newer macOS version (14.0) than being linked (12.0)
ld: warning: dylib (/usr/local/lib/libfuse-t.dylib) was built for newer macOS version (14.0) than being linked (12.0)

It would be better if FUSE-T could target Monterey or Ventura as the minimum version.

Apart from this, it seems to work well and it is certainly less painful than MacFUSE which requires disabling security settings on Apple Silicon.

The next step is to notarize the VeraCrypt binary for FUSE-T and share it here for testing.

idrassi avatar Jun 21 '24 23:06 idrassi

As promised, here is the notarized version of VeraCrypt that uses FUSE-T instead of MacFUSE: VeraCrypt_FUSE-T_1.26.11.dmg.zip

SHA256 SUM: a2ee0316c409d78d721b381cb0610ae33dc6246c0497178780310836644b7b97 VeraCrypt_FUSE-T_1.26.11.dmg

Based my tests, it seems to work well. Feedback is welcomed.

idrassi avatar Jun 23 '24 11:06 idrassi

Hi @idrassi,

First of all, thank you very much for your work!

The new version seems to work on my M1 MacBook, but I found two (minor?) problems.

  1. After creating a new volume and mounting it for the first time, I get the following error: Bildschirmfoto 2024-06-23 um 14 25 38

The next time it was mounted without any problems.

  1. It always mounts to "/Volumes/NO NAME". This may be related to a previous error and may be a problem in the future. I'd suggest using the volume name in the mount point, e.g. "/Volumes/my-vc-test-volume".

Best regards, Vladyslav


Edit: typo.

pashynskykh avatar Jun 23 '24 11:06 pashynskykh

Thank you @pashynskykh for the quick feedback.

For the first issue, it is caused by a FUSE-T issue for which I have already implemented a workaround (a waiting loop of max 1.2 seconds): https://github.com/veracrypt/VeraCrypt/blob/210827d27cdab8ffe33e71653ff269cd3c02dcff/src/Core/Unix/CoreUnix.cpp#L306. On my M1 system, it is enough but it looks like it is not the case everywhere. So I will increase it, maybe to 5 or 10 seconds.

For the second issue, you certainly selected FAT as your filesystem in the wizard, and that’s why you are getting “NO NAME” in the mount point. This is hardcoded in VeraCrypt for FAT formatted volumes: https://github.com/veracrypt/VeraCrypt/blob/210827d27cdab8ffe33e71653ff269cd3c02dcff/src/Core/FatFormatter.cpp#L285. With other filesystems, you will get the standard “Untitled” name variation because VeraCrypt doesn’t set any volume name explicitly.

You can always change the volume name to your liking in Finder by selecting “Rename.” Once done, you will start to see this customized name when you mount the volume with VeraCrypt.

idrassi avatar Jun 23 '24 12:06 idrassi

@idrassi thanks for the detailed answer. Yes, for the second "problem" I used FAT. It really does make sense to avoid using any names at all, as the name could theoretically be a privacy/security issue if not chosen carefully. Thanks for the clarification.

I'll have more time to play with the app tomorrow. If I find anything else, I'll post an update here.

Thanks again for all your work. It's really great to see progress on this issue, as FUSE-T is a superior choice to macFUSE.

Best regards, Vladyslav

pashynskykh avatar Jun 23 '24 12:06 pashynskykh

The new 1.26.11 is working well for me (M1 Max MacBook Pro/MacOS 14.5 + external USB C SSD).

I haven't tested extensively but everything is good so far.

Andy

tarbs avatar Jun 23 '24 12:06 tarbs

Thank you @tarbs for the feedback. This shows that the current workaround for the FUSE-T delay issue does work on some machines other than mine.

I’m starting to like FUSE-T and I hope further tests by the community will not uncover any major issues because it is a good candidate for replacing MacFUSE as the default FUSE layer, esopecially that it is easier to deploy on Apple Silicon for non-technical users.

idrassi avatar Jun 23 '24 12:06 idrassi

@pashynskykh, I have increased the waiting time for FUSE-T to 5 seconds and prepared a new build with this change. Please let me know if this solves the problem of mounting newly created volumes.

VeraCrypt_FUSE-T_1.26.12.dmg.zip

SHA256SUM: bc7f2a37560e46d67b42cf699b29871ac376f8551a10d8bc01f50a80265f6cae Setup/MacOSX/VeraCrypt_FUSE-T_1.26.12.dmg

idrassi avatar Jun 23 '24 20:06 idrassi

@idrassi just checked: created a new volume and mounted it. I didn't get any errors this time. Thank you very much!

pashynskykh avatar Jun 23 '24 21:06 pashynskykh

Just tested on a corp machine with kernel extensions locked down, and thank you! This works perfectly!

chimbori avatar Jun 24 '24 02:06 chimbori

I have been playing more with 1.26.12 today and have not seen any problems. I am happy that it can finally be used on my Macbook with FUSE-T. Thanks a lot @idrassi!

pashynskykh avatar Jun 24 '24 19:06 pashynskykh

Thank you all for the testing, specially @pashynskykh. Things look good for FUSE-T support. It will be the recommended version of VeraCrypt for Apple Silicon.

idrassi avatar Jun 25 '24 07:06 idrassi

It works in regards to using fuse-t - fantastic news.

But I have noticed that it has missing "TrueCrypt Mode" when mounting. Any particular reason to remove it? I have still some old TrueCrypt disks I mount from time to time.

EDIT: I missed that it is no longer supported. I have my answer then.

kapitainsky avatar Jun 26 '24 22:06 kapitainsky

@kapitainsky Thank you for the feedback.

Concerning TrueCrypt support, it was indeed dropped in version 1.26.7 in order to simplify the code base and add room for new Blake2s algorithm. For users like you that have old TrueCrypt volume, it is possible to convert them to VeraCrypt format without loosing any data as indicated in the documentation: https://veracrypt.fr/en/Converting%20TrueCrypt%20volumes%20and%20partitions.html You will have to use version 1.25.9 for this.

idrassi avatar Jun 26 '24 23:06 idrassi

Maybe good excuse to convert these old volumes:)

BTW. I am testing VC and FUSE-T on Intel mac - so far all works perfectly.

kapitainsky avatar Jun 26 '24 23:06 kapitainsky

Installed in a fresh env (first VC installation), Sonoma (24.5) Mac Book Air M3.

FUSE-T 1.0.38 (sshfs: 1.0.2).

First tests OK. Will test on a old volume as soon as possible.

As promised, here is the notarized version of VeraCrypt that uses FUSE-T instead of MacFUSE: VeraCrypt_FUSE-T_1.26.11.dmg.zip

SHA256 SUM: a2ee0316c409d78d721b381cb0610ae33dc6246c0497178780310836644b7b97 VeraCrypt_FUSE-T_1.26.11.dmg

Based my tests, it seems to work well. Feedback is welcomed.

larelogio avatar Jun 27 '24 10:06 larelogio

@idrassi Thank you for updating VeraCrypt to work with fuse-t. Is the code posted somewhere? I can’t seem to find it.

theprivacydesigner avatar Aug 09 '24 21:08 theprivacydesigner

you can grab the latest code from master, the fuse-t changes will be there.

idrassi avatar Aug 09 '24 21:08 idrassi