사이트 설명 번역 추신(크록3ai 더 길게 생각하기 )
네가 설명 것 보다 여기에 나와 있는 내용물 더 정확해요 ^^7
cppcryptfs
cppcryptfs는 Go 언어로 작성된 암호화 오버레이 파일 시스템인 gocryptfs의 설계를 기반으로 합니다.
cppcryptfs는 Windows용으로 C++로 구현된 gocryptfs 파일 시스템입니다. cppcryptfs는 gocryptfs와 호환되며, 한쪽에서 생성한 파일 시스템은 일반적으로 다른 쪽에서도 마운트하고 동기화할 수 있습니다. 이 문서의 끝부분에 있는 호환성에 대한 설명을 참조해 주세요.
cppcryptfs는 가상 파일 시스템에서 파일과 파일 이름을 실시간으로, 저장 시, 그리고 클라우드에서 암호화합니다. Windows에서 사용자 모드로 가상 파일 시스템을 제공하기 위해 Dokany 드라이버와 라이브러리를 사용합니다.
중요: 이 토론에 따르면, 비밀번호가 강력한 경우에만 생성된 gocryptfs.conf를 클라우드에 저장해야 합니다. 공격자가 gocryptfs.conf를 획득하면 암호화된 비밀번호에 대해 무차별 대입 공격을 시도할 수 있습니다. scryptn을 증가시키면 공격 속도를 늦출 수 있습니다(아래 참조). 개발자는 자신의 gocryptfs.conf를 클라우드에 저장하고 있으며, 매우 강력한 비밀번호를 사용합니다.
cppcryptfs를 사용하면 폴더 내에 암호화된 파일 시스템을 생성할 수 있습니다. 이 암호화된 파일 시스템은 사용자가 선택한 비밀번호로 보호됩니다.
cppcryptfs를 사용하여 비밀번호를 제공하고 암호화된 파일 시스템을 마운트하면, Windows에 새로운 드라이브 문자가 생깁니다. 이 가상 드라이브 문자는 파일의 암호화되지 않은 뷰를 제공합니다. 암호화와 복호화는 실시간으로 이루어지며, 해당 가상 드라이브의 파일을 사용하는 애플리케이션에는 투명하게 작동합니다.
cppcryptfs에 가상 드라이브 문자를 마운트 해제하도록 지시하면, 파일 시스템을 비밀번호로 다시 마운트하지 않는 한 암호화되지 않은 데이터에 접근할 방법이 없습니다.
컴퓨터를 종료하면 모든 cppcryptfs 드라이브 문자가 자동으로 마운트 해제됩니다.
암호화된 파일이 저장된 폴더가 클라우드 서비스와 동기화되고 있다면, 암호화된 파일과 암호화된 파일 이름만 클라우드 서비스에 업로드됩니다.
이렇게 하면 클라우드 서비스의 직원이나 클라우드 서비스를 해킹한 누구도 사용자의 파일을 사용할 수 없습니다.
또한, 누군가 사용자의 컴퓨터를 훔쳐도 암호화된 파일 시스템이 마운트되지 않은 상태라면 도둑은 사용자의 파일을 사용할 수 없습니다.
cppcryptfs는 컨테이너 파일을 사용하는 대신 파일 단위로 암호화를 수행하므로, 미리 암호화된 저장 공간의 크기를 결정할 필요가 없습니다. cppcryptfs는 저장 공간 오버헤드가 매우 적으며, 암호화된 파일 시스템은 물리적 드라이브의 여유 공간에 따라 동적으로 확장될 수 있습니다.
파일 단위 암호화는 컨테이너 기반 암호화에 비해 클라우드 서비스와 매우 빠르고 효율적으로 동기화된다는 장점도 있습니다.
개발자는 3년 넘게 cppcryptfs를 순방향(일반) 모드로 사용해 왔으며, 데이터 손실이 발생한 적이 없습니다. 적어도 한 명의 다른 사용자도 사용 중입니다.
역방향 모드는 개발자에 의해 제한적인 테스트만 거쳤습니다.
개발자 Bailey Brown Jr가 서명한 바이너리 릴리스는 릴리스 페이지에서 확인할 수 있습니다.
무언가 잘못될 경우를 대비해 항상 데이터 백업을 유지하는 것이 현명합니다.
cppcryptfs는 관리자 권한으로 실행 시 winfstest에서 506/506 테스트를 통과합니다. 관리자 권한이 없는 경우에는 500/506 테스트를 통과합니다. 이 winfstest는 Dokany 프로젝트에서 사용하는 버전에서 포크되었습니다. Dokany 팀은 추가 테스트를 포함했습니다.
관리자 권한 없이 실행할 때 cppcryptfs가 실패하는 테스트는 DACL(임의 접근 제어 목록) 관련 작업과 관련이 있습니다. 이러한 작업을 위해서는 cppcryptfs를 관리자 권한으로 실행해야 합니다. 관리자 권한 없이 실행해도 cppcryptfs의 일반적인 사용에는 영향을 미치지 않는 것으로 보입니다.
참고: Windows 10 버전 1909(OS 빌드 18363.1016)에서는 cppcryptfs가 관리자 권한 없이도 모든 506 테스트를 통과할 수 있는 것으로 보입니다.
Microsoft Visual Studio 2022 Community Edition, perl, nasm, git (모두 무료)
OpenSSL - https://github.com/openssl/openssl (정적 빌드 필요)
RapidJSON - https://github.com/miloyip/rapidjson (gocryptfs.conf 파싱용)
Dokany - https://github.com/dokan-dev/dokany
Dokany의 경우, 다음에서 바이너리 배포판을 사용하는 것이 좋습니다:
https://github.com/dokan-dev/dokany/releases
(설치자 옵션에서 "개발 파일 설치"를 선택해야 합니다)
자세한 빌드 지침은 INSTALL.md 에 있습니다.
cppcryptfs는 현재 Dokany 2.3.0.1000 과 호환됩니다.
cppcryptfs는 실행하는 데 관리자 권한이 필요하지 않지만, 관리자로 실행하지 않으면 SE_SECURITY_NAME 권한을 획득할 수 없습니다. SE_SECURITY_NAME 은 Windows API 함수 SetFileSecurity() 및 GetFileSecurity() 에서 수행하는 일부 작업에 필요합니다.
cppcryptfs는 SE_SECURITY_NAME 없이도 작동하는 것으로 보입니다. 문제가 발생할 경우, cppcryptfs를 관리자로 실행하여 문제가 해결되는지 확인해 보세요.
Windows에서는 민감한 데이터가 디스크에 유출되지 않도록 페이지 파일을 암호화해야 합니다. 관리자 권한으로 CMD.exe 에서 다음 명령을 실행하세요:
fsutil behavior set EncryptPagingFile 1
새로운 암호화된 가상 파일 시스템을 만들려면 먼저 "Create" 탭 을 클릭하세요.
먼저, 파일 시스템의 루트가 될 디렉터리를 찾거나 생성해야 합니다. UI의 디렉터리 선택기를 사용하여 이 작업을 수행할 수 있습니다.
일반(순방향) 모드 에서는 이 디렉터리가 비어 있어야 합니다.
역방향 모드 에서는 디렉터리가 비어 있을 필요가 없습니다. 역방향 모드에 대한 자세한 내용은 이 문서의 "역방향 모드" 섹션을 참조하세요.
이 디렉터리는 NTFS 파일 시스템 에 위치하는 것이 강력히 권장됩니다.
강력한 비밀번호를 선택하고 반복하여 입력해야 합니다. 비밀번호 입력 창은 최대 255자까지 허용합니다.
비밀번호 필드에서는 한 가지 특수 문자가 제한됩니다. 이 문자는 작은 'x'처럼 보이지만 다릅니다. 유니코드 215(16진수로 0xd7)로, 비밀번호에 사용할 수 없습니다.
파일 이름을 암호화할지 여부를 선택할 수 있습니다:
AES256-EME 를 사용하여 파일 이름을 암호화합니다.
또는 파일 이름을 암호화하지 않고 일반 텍스트 로 유지합니다.
"긴 파일 이름" 옵션을 선택하면 암호화된 파일 및 디렉터리 이름이 최대 255자까지 허용됩니다. 이 옵션은 일반 텍스트 파일 이름에는 영향을 미치지 않습니다(일반 텍스트 파일 이름은 기본적으로 최대 255자까지 가능). 자세한 내용은 이 문서의 "파일 이름 및 경로 길이 제한" 섹션을 참조하세요.
"긴 이름 최대값" 을 255 미만으로 설정하면(최소값은 62), cppcryptfs는 파일 이름 길이를 제한합니다. 예를 들어, 62를 선택해도 생성되는 파일 이름은 최대 67자까지 될 수 있습니다. 이 옵션은 특정 클라우드 서비스에서 긴 파일 이름 처리 문제를 방지하는 데 유용합니다.
"결정론적 이름" 을 선택하면 cppcryptfs는 DirIV 파일을 사용하지 않습니다. 이는 gocryptfs 설명서에서 인용된 내용입니다:
파일 이름 무작위화와 gocryptfs.diriv 파일 생성을 비활성화합니다. 이는 파일 동기화 시 충돌을 방지할 수 있지만, 디렉터리 간 동일한 파일 이름에 대한 정보가 유출될 수 있습니다("Identical names leak" in https://nuetzlich.net/gocryptfs/comparison/#file-names ).
이 경우, 생성되는 gocryptfs.conf 파일의 "FeatureFlags"에서 "DirIV"가 누락됩니다.
파일 데이터 암호화를 위해 AES256-GCM 또는 AES256-SIV (RFC 5297) 중에서 선택할 수 있습니다.
기본값은 AES256-GCM 이며, 스트리밍 읽기 및 쓰기에서 SIV보다 약 2배 빠릅니다. 이 모드가 권장됩니다.
SIV 모드는 역방향 모드를 지원하기 위해 구현되었습니다.
참고: gocryptfs 문서에서는 SIV 모드를 AES-512-SIV 로 지칭하지만, cppcryptfs에서는 AES256-SIV 로 표시됩니다. 이는 512비트 SIV 키가 256비트 마스터 키에서 파생되기 때문입니다(gocryptfs와 동일). 또한, 사용자 인터페이스에서 AES512-SIV로 표시하면 사용자가 AES256-GCM보다 더 안전하다고 오해할 수 있어 AES256-SIV로 명명되었습니다.
AES-512-SIV 문서 링크
https://nuetzlich.net/gocryptfs/reverse_mode_crypto/
"역방향" 을 선택하면 역방향 모드 파일 시스템을 생성합니다. 역방향 모드에 대한 자세한 내용은 이 문서의 해당 섹션을 참조하세요.
설정 파일을 지정할 수 있습니다. 이 파일은 파일 시스템의 설정과 비밀번호로 암호화된 랜덤 256비트 AES 마스터 키를 포함합니다. 추가 보안을 위해 설정 파일을 암호화된 파일 시스템 외부에 보관할 수 있습니다.
볼륨에 레이블 을 지정할 수 있으며, 이는 gocryptfs.conf 에 암호화되어 저장됩니다. 레이블의 최대 길이는 32자입니다.
레이블은 마스터 키와 128비트 랜덤 초기화 벡터, 8바이트의 0으로 된 인증 데이터를 사용하여 AES256-GCM으로 암호화됩니다. 그런 다음 초기화 벡터와 함께 base64로 인코딩되어 gocryptfs.conf 에 저장됩니다.
파일 탐색기에서 마운트된 드라이브 문자를 오른쪽 클릭하고 "속성"을 선택하여 볼륨 레이블을 변경할 수 있습니다. 하지만 이 작업은 드라이브를 마운트 해제할 때 cppcryptfs가 gocryptfs.conf 를 다시 작성하게 하므로 파일 손상 위험이 있습니다. 따라서 gocryptfs.conf 를 백업하는 것이 좋습니다.
"명명된 스트림 비활성화" 옵션은 기본 파일 시스템(예: Samba를 통해 공유된 Linux 파일 시스템)이 명명된 스트림을 지원하지 않는 경우 필요할 수 있습니다. cppcryptfs는 일반적으로 마운트 시 자동으로 기본 파일 시스템이 명명된 스트림을 지원하는지 감지합니다. 그러나 일부 구성에서는 지원하지 않음에도 지원한다고 잘못 보고할 수 있어 이 옵션이 유용합니다. 개발자는 Ubuntu 16.04 Samba에서 테스트했으며 문제가 없었지만, 다른 Linux 버전에서 문제가 발생한 사용자(#63 참조)를 위해 이 기능이 추가되었습니다.
"마운트" 탭 에서 드라이브 문자와 방금 파일 시스템을 생성한 폴더를 선택한 후 비밀번호를 입력하고 "마운트" 버튼 을 클릭하세요.
"생성" 버튼 을 클릭하면 설정 파일이 생성됩니다. 대체 설정 파일을 지정하지 않은 경우, 암호화된 파일 시스템의 루트 디렉터리에 gocryptfs.conf 로 저장됩니다.
파일 이름을 일반 텍스트로 사용하지 않는 한, gocryptfs.diriv 파일도 생성됩니다.
gocryptfs.conf 가 손상되거나 분실되면 데이터에 접근할 수 없으므로, 이 파일을 반드시 백업하세요.
파일 시스템의 수명 동안 gocryptfs.conf 는 볼륨 레이블을 변경하지 않는 한 변경되지 않습니다.
마운트 지점 추가 : 드라이브 문자 목록에서 마우스 오른쪽 버튼을 클릭하고 "마운트 지점 추가" 를 선택할 수 있습니다. 이렇게 하면 드라이브 문자 대신 사용할 빈 디렉터리를 마운트 지점으로 목록에 추가할 수 있습니다. 이 디렉터리는 NTFS 볼륨 에 있어야 합니다. 추가된 마운트 지점은 드라이브 문자 아래에 표시되며, 마우스 오른쪽 버튼을 클릭하여 삭제할 수 있습니다. 추가한 마운트 지점은 Windows 레지스트리 에 저장됩니다.
참고 : A:와 B:는 마운트 지점으로 사용할 수 있지만, 암호화된 파일 시스템을 이들에 마운트하면 Windows 업데이트 에 문제가 발생할 수 있으므로 권장하지 않습니다.
마운트된 파일 시스템 관리 : 마운트된 파일 시스템에서 마우스 오른쪽 버튼을 클릭하여 마운트 해제 하거나 속성을 볼 수 있습니다.
파일 탐색기에서 열기 : 마운트된 볼륨을 더블 클릭하면 파일 탐색기 창에서 열립니다.
파일 시스템을 생성할 때 설정 파일의 사용자 지정 경로 를 지정했다면, 마운트 시에도 동일하게 지정해야 합니다.
사용자 지정 경로를 지정한 경우, 역방향 파일 시스템이라면 "역방향" 을 선택해야 합니다. 그렇지 않으면 cppcryptfs가 자동으로 순방향 또는 역방향 모드를 감지합니다.
참고 : cppcryptfs는 암호화된 파일 시스템의 경로를 키로 사용하여 설정 파일의 사용자 지정 경로(있는 경우), 역방향 모드, 읽기 전용 등의 설정을 기억합니다. 따라서 마운트할 경로를 선택할 때는 이러한 설정이 이번에 사용하고자 하는 설정과 일치하는지 확인해야 합니다.
"scryptn" 정보 : "scryptn"에 대한 정보는 cppcryptfsctl 의 --scryptn 매개변수 문서를 참조하세요.
파일 시스템을 마운트한 후에는 새로운 드라이브 문자가 생기며, 이를 일반 드라이브처럼 사용할 수 있습니다. 데이터는 암호화되어 지정한 폴더에 저장됩니다.
"읽기 전용" : "읽기 전용"을 선택하면 파일 시스템이 읽기 전용(쓰기 금지) 으로 마운트됩니다.
저장된 비밀번호 : cppcryptfs에서 저장된 비밀번호가 어떻게 작동하는지에 대한 설명은 아래의 "저장된 비밀번호" 섹션을 참조하세요.
"자동 마운트" : "자동 마운트"를 선택하면(저장된 비밀번호가 필요함), 다음에 cppcryptfs를 시작할 때 해당 경로가 해당 마운트 지점에 자동으로 마운트됩니다. 이를 위해서는 해당 마운트에 대한 비밀번호를 저장해야 합니다. "자동 마운트"를 선택하지 않고 수동으로 마운트할 때까지 자동 마운트가 계속됩니다.
암호화 설계 : gocryptfs의 암호화 설계에 대한 기술적 세부 사항은 gocryptfs 프로젝트 페이지 를 방문하세요.
비밀번호와 키 관리 : 비밀번호와 키는 VirtualLock() 을 사용하여 메모리에 잠기며, 더 이상 필요하지 않을 때 SecureZeroMemory() 를 사용하여 지워집니다. 컴퓨터를 절전 모드 로 전환하지 않는다면, 비밀번호나 키가 하드 드라이브에 기록될 염려가 없습니다.
마운트 해제 : 드라이브 문자를 사용한 후에는 "마운트" 탭 에서 해당 드라이브 문자를 선택하고 "마운트 해제" 또는 "모두 마운트 해제" 를 클릭하여 마운트 해제할 수 있습니다. 이렇게 하면 암호화 키가 메모리에서 지워집니다.
다중 마운트 : 사용 가능한 드라이브 문자가 있는 한, 여러 개의 gocryptfs 파일 시스템을 마운트할 수 있습니다.
프로그램 종료 : cppcryptfs 창을 닫으면 시스템 트레이 에 숨겨집니다. 종료하려면 "마운트" 페이지 의 "종료" 버튼 이나 시스템 트레이 아이콘의 컨텍스트 메뉴를 사용하세요.
cppcryptfs에는 설정 탭이 있습니다.
권장 설정이 표시됨
설정 탭에서 값을 변경하면 이후에 마운트되는 모든 파일 시스템에 영향을 미칩니다. 이미 마운트된 파일 시스템에는 영향을 주지 않습니다.
현재 설정은 Windows 레지스트리에 저장되며, 다음에 파일 시스템을 마운트할 때(명령줄에서도) 사용됩니다.
설정 탭에는 다음과 같은 설정이 있습니다:
I/O 버퍼 크기 (KB)
이 설정은 cppcryptfs가 기본 파일 시스템에서 수행하는 읽기 및 쓰기의 최대 크기를 제어합니다.
cppcryptfs는 실제로 암호화된 블록 크기(4,128바이트)의 배수로 I/O를 수행합니다. 따라서 4KB를 지정하면 버퍼 크기는 실제로 4,128바이트이고, 1024KB를 지정하면 1,056,768바이트입니다.
I/O 버퍼 크기를 늘리면 성능이 향상될 수 있습니다.
캐시 수명
cppcryptfs는 파일 시스템에 대한 정보를 캐시합니다. 캐시 항목이 수명 시간보다 오래된 경우, 사용하기 전에 해당 항목을 다시 검증합니다.
캐시 수명을 늘리거나 무한으로 설정하면 성능이 향상됩니다.
그러나 cppcryptfs 파일 시스템을 다른 컴퓨터에서 실행 중인 cppcryptfs 또는 gocryptfs 인스턴스와 지속적으로 동기화하는 경우, 캐시 수명을 너무 높게 설정하면 다른 컴퓨터에서 파일 시스템이 수정될 때 오류가 발생할 수 있습니다.
두 개의 동시 실행 중인 cppcryptfs 인스턴스 또는 cppcryptfs와 gocryptfs 인스턴스 간에 파일 시스템을 동기화하지 않는다면, 캐시 수명을 높게 설정하거나 무한으로 설정해도 문제가 없습니다.
다중 스레드
이 옵션을 켜면 각 파일 시스템에 대해 여러 스레드가 요청을 처리할 수 있습니다. 이는 성능 향상에 도움이 될 수 있습니다. Dokany는 사용할 스레드 수를 자동으로 선택합니다.
이 옵션을 비활성화하면 파일 시스템당 하나의 스레드만 요청을 처리합니다.
대소문자 구분 없음
이 옵션은 순방향 모드에서만 영향을 미치며, 암호화된 파일 이름을 사용할 때에만 적용됩니다. 역방향 모드의 암호화된 파일 이름은 항상 대소문자를 구분하며, 일반 텍스트 파일 이름은 항상 대소문자를 구분하지 않습니다.
일반적으로 파일 이름 암호화를 사용할 때, cppcryptfs는 파일과 디렉터리를 생성할 때 사용한 대소문자와 동일한 대소문자로 열어야 합니다.
"대소문자 구분 없음" 옵션을 선택하면, cppcryptfs는 파일 이름 암호화를 사용하더라도 순방향 모드에서 파일 및 디렉터리 이름의 대소문자를 무시합니다. 이는 Windows API의 일반적인 동작 방식이며, 성능이 약간 저하될 수 있습니다.
자세한 내용은 "대소문자 구분" 섹션을 참조하세요.
마운트 관리자 활성화 (휴지통)
이 설정은 현재 기본 또는 권장 설정에서 활성화되지 않습니다. 사용하려면 별도로 활성화해야 하며, 철저히 테스트되지 않았습니다.
이 설정은 암호화된 볼륨에서 Windows 마운트 관리자를 활성화합니다. 마운트 관리자를 활성화하면 휴지통이 활성화됩니다. 이 설정은 cppcryptfs가 관리자로 실행될 때만 작동합니다. 관리자 권한 없이 이 설정을 켜고 파일 시스템을 마운트하려고 하면, cppcryptfs는 경고 대화 상자를 표시하고(비활성화 가능) 마운트 관리자를 활성화하지 않습니다.
이 설정은 역방향 파일 시스템이나 읽기 전용으로 마운트된 파일 시스템에는 영향을 미치지 않습니다.
참고: Dropbox와 같은 서비스로 암호화된 파일을 동기화하는 경우, 마운트 관리자(휴지통)를 활성화하면 Dropbox가 충분한 권한이 없어 휴지통의 파일을 동기화하지 못할 수 있습니다. Dropbox를 관리자로 실행하거나, 휴지통의 암호화된 폴더 이름을 확인하여 Dropbox의 선택적 동기화 기능으로 제외해야 합니다. 일반 텍스트 파일 이름을 사용하는 경우, 휴지통은 "$RECYCLE.BIN"으로 표시됩니다. 명령줄 스위치 --list를 사용하면 (암호화되지 않은) 파일 시스템의 루트 디렉터리 경로를 인수로 제공하여 휴지통의 암호화된 이름을 찾을 수 있습니다.
예시:
text
복사
cppcryptfs --list=d:\
저장된 비밀번호 활성화
이 설정은 비밀번호 저장을 활성화합니다. 자세한 내용은 아래의 "저장된 비밀번호" 섹션을 참조하세요.
이 설정이 켜져 있으면, 마운트 탭의 "비밀번호 저장" 체크박스를 사용할 수 있습니다.
"저장된 비밀번호 활성화" 설정을 해제하면, cppcryptfs는 모든 저장된 비밀번호를 삭제할지 묻습니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
기록 저장 안 함
이 설정은 Windows 레지스트리에 이 페이지에 설명된 값 외에는 어떤 값도 저장하지 않도록 합니다. 예를 들어, 경로 기록이나 비밀번호 저장(비밀번호 저장이 활성화된 경우에도)을 방지합니다.
이 설정을 선택하면, cppcryptfs가 Windows 레지스트리에 저장한 모든 값(저장된 비밀번호 제외)이 삭제됩니다. 그러나 이 설정이 적용된 동안에는 새로운 비밀번호가 저장되지 않습니다.
저장된 비밀번호를 삭제하려면 "비밀번호 저장" 설정을 해제해야 합니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
desktop.ini 파일 삭제
이 설정은 #62 이슈를 위해 만들어졌습니다. Google Drive가 암호화된 파일의 소스 폴더의 모든 디렉터리에 숨겨진 desktop.ini 파일을 생성하여, 사용자가 암호화되지 않은 측에서 디렉터리를 삭제하지 못하게 하는 문제가 보고되었습니다. 이 설정을 켜고 파일 시스템을 마운트하면, cppcryptfs는 디렉터리를 삭제할 때 암호화되지 않은 desktop.ini 파일을 자동으로 삭제합니다.
이 설정은 순방향 모드에서만 영향을 미치며, 암호화된 파일 이름을 사용할 때에만 적용됩니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
마운트 시 열기
이 설정을 활성화하면, 암호화된 볼륨을 마운트할 때 Windows의 기본 파일 관리 프로그램(일반적으로 파일 탐색기)으로 자동으로 열립니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
메모리에서 키 암호화
이 설정을 활성화하면, cppcryptfs는 Windows Data Protection API(DPAPI)를 사용하여 필요하지 않을 때 암호화 키(기본 키 및 파생 키)를 암호화된 상태로 유지합니다. 키는 DPAPI로 암호화되고, 필요할 때 복호화된 후 사용되지 않을 때는 복호화된 복사본이 지워집니다. DPAPI에 대한 자세한 내용은 아래의 "저장된 비밀번호" 섹션을 참조하세요.
이 설정은 악성 소프트웨어가 cppcryptfs의 프로세스 메모리에서 복호화된 키를 읽을 가능성을 줄입니다.
또한, 시스템이 최대 절전 모드로 전환될 때 복호화된 키가 디스크의 최대 절전 모드 파일에 남지 않도록 합니다.
이 설정은 새로 도입되었으며, 구현상의 버그로 인해 데이터 손실이 발생할 수 있습니다. 암호화된 파일 시스템을 자주 백업하는 경우에만 이 설정을 사용하는 것이 좋습니다.
이 설정과 함께 "메모리에서 키 캐시"를 사용하는 것이 권장됩니다. 그렇지 않으면 성능에 상당한 영향을 미칠 수 있습니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
메모리에서 키 캐시
이 설정은 "메모리에서 키 암호화"가 활성화된 경우에만 영향을 미칩니다.
이 설정을 활성화하고 "메모리에서 키 암호화"도 활성화된 경우, cppcryptfs는 복호화된 키를 최대 1초 동안 캐시하여 재사용합니다.
이 설정은 "메모리에서 키 암호화"의 성능 영향을 거의 제로로 줄입니다. 이 설정을 활성화하지 않으면 성능이 크게 저하됩니다.
시스템이 대기 또는 최대 절전 모드로 전환되기 직전에 cppcryptfs는 캐시를 자동으로 비활성화하여 저전력 모드에서 복호화된 키가 메모리에 남지 않도록 합니다. 시스템이 깨어나면 캐시가 자동으로 다시 활성화됩니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
빠른 마운트 활성화
이전에는 cppcryptfs가 Dokany의 콜백을 기다려 마운트 작업의 성공 여부를 확인했습니다. Dokany는 일반적으로 5초 정도 걸렸지만, 파일 시스템은 거의 즉시 마운트되어 사용 가능했습니다.
"빠른 마운트 활성화"를 켜면, cppcryptfs는 Dokany의 콜백을 기다리는 동시에 주기적으로 파일 시스템이 마운트되었는지 확인합니다. 파일 시스템이 마운트된 것으로 확인되면, Dokany를 기다리지 않고 마운트가 성공했다고 간주합니다. 이 설정을 비활성화하면 Dokany의 콜백만 기다립니다.
이 설정을 활성화하면, 개발자의 시스템에서 성공적인 마운트 작업이 이전의 5초 대신 약 31밀리초 만에 표시됩니다.
참고: 이 설정은 마운트 지점이 드라이브 문자가 아닌 빈 NTFS 디렉터리일 때는 영향을 미치지 않습니다. Dokany는 디렉터리를 마운트 지점으로 사용할 때 빠르게 성공 신호를 보내기 때문에 폴링이 필요 없습니다.
이 설정은 기본적으로 활성화되어 있습니다.
마운트 해제 시 사용 중 경고
이 설정을 켜면, 사용자가 파일 시스템을 마운트 해제하거나 모든 파일 시스템을 마운트 해제하거나 프로그램을 종료하려 할 때, 마운트된 파일 시스템에 열려 있는 파일이나 디렉터리가 있는 경우 cppcryptfs가 사용자에게 알리고 계속 진행할지 묻습니다.
이 설정이 켜져 있으면, 사용 중인 파일 시스템을 마운트 해제하려면 명령줄에서 --force 플래그가 필요합니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
다른 세션 거부
이 설정을 활성화하면, 암호화된 볼륨은 cppcryptfs를 시작한 세션에서만 접근할 수 있습니다. 다른 세션에서는 드라이브 문자가 보이더라도 접근할 수 없습니다.
이 검사는 CreateFile API 호출(새 파일 및 디렉터리 생성 및 기존 파일 열기)에서만 이루어집니다. CreateFile에서만 접근을 거부하는 것이 일반적으로 충분한 것으로 보입니다.
이 기능은 다른 세션에 로그인한 일반 사용자가 동일한 컴퓨터에서 마운트된 볼륨에 접근하지 못하도록 보호합니다. 그러나 결정적이고 지식이 있는 공격자가 이 보호를 우회할 방법을 찾을 수 있을지는 확실하지 않습니다.
자세한 내용은 아래의 "서비스 거부" 설명을 참조하세요.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
서비스 거부
이 설정을 활성화하면, 세션 0에서 실행 중인 Windows 서비스가 암호화된 볼륨에 접근할 수 없습니다.
시스템 계정으로 실행되는 Windows 서비스나 "운영 체제의 일부로 작동" 사용자 권한을 가진 사용자가 생성한 프로세스는 액세스 토큰을 만들어 원하는 세션 ID를 설정할 수 있습니다. 따라서 이 보호는 절대적이지 않지만, 일반적인 사용 상황에서 Windows 서비스가 마운트된 파일 시스템에 접근하는 것을 방지할 수 있습니다.
이 설정은 기본 또는 권장 설정에서 활성화되지 않습니다.
기본값 및 권장 설정
"기본값" 및 "권장" 버튼은 모든 설정을 기본 설정 또는 권장 설정으로 복원합니다.
현재 기본 설정과 권장 설정은 동일합니다.
경고 재설정
"경고 재설정" 버튼을 누르면 이전에 "이 메시지를 다시 표시하지 않음"을 선택하여 비활성화된 경고 대화 상자가 다시 활성화됩니다.
쓰기 후 플러시 활성화
사용자가 exFAT 파일 시스템으로 포맷된 외장 드라이브에 많은 데이터를 복사할 때 타임아웃이 발생한다고 보고했습니다.
이 문제는 exFAT에 특화된 것으로 보입니다.
해결 방법은 쓰기 후 플러시를 활성화하는 것입니다. 이 설정이 켜져 있으면, cppcryptfs는 요청된 모든 쓰기 작업 후에 Windows가 데이터를 디스크에 기록하도록 강제합니다.
이 옵션은 쓰기 성능을 눈에 띄게 저하시킵니다. 큰 파일을 복사할 때는 약 50% 저하되며, 많은 작은 파일의 경우 그보다 훨씬 더 저하됩니다.
이 설정은 조건 중 하나라도 참이면 켜지므로, 항상 활성화하려면 "NTFS"와 "NTFS가 아님" 상자를 모두 선택할 수 있습니다.
저장된 비밀번호
설정 탭에서 "저장된 비밀번호 활성화" 설정이 활성화되면, 마운트 탭의 "비밀번호 저장" 체크박스를 사용할 수 있습니다.
cppcryptfs가 비밀번호를 저장할 때, Windows Data Protection API (DPAPI)를 사용하여 비밀번호를 암호화합니다. Windows DPAPI는 여기 에 설명되어 있습니다.
Windows DPAPI를 사용하여 암호화된 데이터는 Windows에 로그인할 때 사용하는 비밀번호의 강도와 보안성에 따라 달라집니다.
저장된 비밀번호는 암호화된 파일 시스템의 루트 경로와 연결됩니다.
또한, "비밀번호 저장" 설정 자체도 경로와 연결됩니다.
비밀번호를 저장하려면, 파일 시스템을 마운트할 때 "비밀번호 저장" 상자를 선택해야 합니다.
비밀번호는 DPAPI를 사용하여 암호화되고 Windows 레지스트리에 저장됩니다.
비밀번호를 입력하지 않고 파일 시스템을 마운트하려면, "비밀번호 저장"이 선택되어 있는지 확인하고, 경로 기록에서 경로를 선택하면 해당 경로의 비밀번호(있는 경우)가 비밀번호 필드에 채워집니다(점으로 표시됨). 또는 경로를 선택하지 않고 경로 필드에 입력하고 비밀번호를 입력하지 않고 마운트 버튼을 누르면, 해당 경로의 저장된 비밀번호가 발견되면 사용됩니다.
-P 명령줄 옵션을 사용하면 해당 경로의 저장된 비밀번호를 사용하여 명령줄에서 파일 시스템을 마운트할 수 있습니다.
역방향 모드에서는 파일 시스템의 소스(루트) 디렉터리가 암호화되지 않은 파일들로 구성됩니다. 이 디렉터리를 마운트하면, cppcryptfs 드라이브 문자를 통해 실시간으로 암호화된 파일 뷰를 제공합니다.
역방향 모드에서는 설정 파일을 gocryptfs.conf 로 제공하며, 암호화된 파일 이름을 사용하는 경우 각 디렉터리에 gocryptfs.diriv 파일이 포함됩니다. 또한, 긴 파일 이름을 사용하면 특수 긴 파일 이름 파일도 함께 제공됩니다.
역방향 모드 파일 시스템은 항상 읽기 전용 으로 마운트됩니다.
역방향 모드 파일 시스템을 생성할 때, 파일 시스템의 루트 디렉터리가 비어 있을 필요는 없습니다(일반 순방향 모드와 다름). cppcryptfs는 파일 시스템의 루트 디렉터리에 숨겨진 설정 파일 .gocryptfs.reverse.conf 를 생성합니다(일반 모드에서는 숨겨지지 않은 gocryptfs.conf 사용).
파일 시스템을 마운트할 때, cppcryptfs는 먼저 .gocryptfs.reverse.conf 를 찾습니다. 이 파일이 있으면 역방향 모드로 마운트하고, 없으면 gocryptfs.conf 를 찾아 순방향(일반) 모드로 마운트합니다.
설정 파일의 사용자 지정 경로를 지정한 경우, 역방향 모드로 마운트하려면 "역방향" 을 선택해야 합니다.
역방향 파일 시스템을 마운트한 후 전체 디렉터리 트리를 다른 위치로 복사하면, 그 복사본(암호화된 파일과 일반 모드 설정 파일 및 기타 지원 파일 포함)을 순방향(일반) 파일 시스템으로 마운트할 수 있습니다.
역방향 모드는 암호화되지 않은 파일의 디렉터리 트리를 백업하고 싶지만 백업본을 암호화하고자 할 때 유용합니다.
역방향 모드는 파일 데이터에 대해 결정론적 AES256-SIV 암호화 모드(실제로는 AES512-SIV이지만 512비트 SIV 키는 256비트 마스터 키에서 파생됨)를 사용하며, 파일 이름 암호화도 결정론적으로 수행합니다.
참고: 순방향 모드에서 AES256-SIV를 사용하여 파일 시스템을 마운트하면, 새로운 암호화는 비결정론적으로 수행됩니다(gocryptfs와 동일).
역방향 모드의 암호화가 결정론적이므로, rsync 와 같은 유틸리티를 사용하여 암호화된 파일을 백업할 때 변경된 파일만 복사할 수 있습니다. 또한, 백업 유틸리티가 델타 동기화를 지원하면(rsync처럼), 암호화되지 않은 데이터에서 델타 동기화를 지원하는 경우 역방향 모드에서도 암호화된 데이터에 대해 델타 동기화를 수행할 수 있습니다. 단, 파일에 데이터가 삽입되면 삽입 지점(실제로는 해당 암호화 블록)부터 암호화된 파일 데이터에 연쇄적인 변경이 발생하여 그 부분부터 다시 복사해야 합니다.
마운트된 역방향 파일 시스템을 순방향 모드로 마운트하는 것도 가능하며, 이 경우 순방향 파일 시스템도 읽기 전용입니다. 이는 주로 테스트 목적으로 유용합니다.
cppcryptfs는 파일 시스템을 마운트하고 마운트 해제하기 위한 명령줄 옵션을 제공합니다. 현재 파일 시스템 생성은 GUI를 통해서만 가능합니다.
cppcryptfs는 하나의 주요 인스턴스만 실행할 수 있습니다. 다른 cppcryptfs 인스턴스가 실행 중이 아니면, 명령줄 인수를 처리한 후 계속 실행됩니다. 이미 실행 중인 인스턴스가 있으면, 명령줄 인수를 이미 실행 중인 주요 인스턴스로 전달합니다. 콘솔 창에서 실행된 경우, 명령줄 처리 출력을 콘솔에 표시하고, 그렇지 않으면 메시지 상자에 표시합니다.
또한, cppcryptfsctl 이라는 동반 프로그램이 있어 이미 실행 중인 cppcryptfs에 명령을 보낼 수 있습니다. cppcryptfsctl은 콘솔 프로그램으로, ERRORLEVEL 을 설정하므로 배치 스크립트에서 테스트할 수 있습니다. 또한, 출력을 파일로 리디렉션하거나 grep 이나 findstr 같은 프로그램으로 파이프할 수 있습니다. cppcryptfs는 ERRORLEVEL을 설정하지 않으며, 출력을 리디렉션할 수 없습니다.
cppcryptfsctl은 성공 시 ERRORLEVEL을 0으로, 오류 발생 시 1로, 연결 실패 시 2로 설정합니다(이는 cppcryptfs가 실행 중이 아님을 의미).
명령줄을 통해 전달된 비밀번호는 완전히 안전하지 않습니다. cppcryptfs는 내부적으로 명령줄 복사본을 잠그고 지우지만, 예를 들어 Windows PEB(프로세스 환경 블록)에 저장된 명령줄은 지우지 않습니다. 또한, cppcryptfs가 이미 실행 중인 경우, 명령줄에서 cppcryptfs(또는 cppcryptfsctl)를 호출하면 명령줄을 실행 중인 인스턴스로 전달합니다. 이를 위해 로컬 Windows 명명된 파이프를 사용하며, 서명된 프로그램이 양쪽에서 실행 중인지 확인합니다. 그러나 Windows가 cppcryptfs의 제어 밖에서 명령줄을 복사하는 횟수는 알 수 없으므로, 명령줄을 통해 전달된 비밀번호가 페이징 파일이 사용 중일 때 페이징 파일에 남을 가능성이 있습니다.
명명된 파이프의 이름은 cppcryptfs를 시작한 사용자의 사용자 이름과 도메인 이름으로 장식됩니다. 따라서 cppcryptfs/cppcryptfsctl은 동일한 사용자가 시작한 cppcryptfs 인스턴스와만 통신할 수 있습니다
-m, --mount=PATH : PATH에 위치한 파일 시스템을 마운트합니다.
-d, --drive=D : 드라이브 문자 D 또는 빈 디렉터리 DIR에 마운트합니다.
-p, --password=PASS : 비밀번호 PASS를 사용합니다.
-P, --saved-password : 저장된 비밀번호를 사용합니다.
-r, --readonly : 읽기 전용으로 마운트합니다.
-c, --config=PATH : 설정 파일의 경로를 지정합니다 (초기화/마운트용).
-s, --reverse : 역방향 파일 시스템을 초기화/마운트합니다 (초기화 시 SIV 암호화 사용).
--deny-other-sessions [1|0] : 다른 세션의 접근을 허용(1) 또는 차단(0)합니다.
--deny-services [1|0] : 서비스의 접근을 허용(1) 또는 차단(0)합니다.
-u, --unmount=D : 드라이브 문자 D 또는 디렉터리 DIR를 마운트 해제합니다.
-u, --unmount=all : 모든 드라이브를 마운트 해제합니다.
-f, --force : 사용 중일 때도 강제로 마운트 해제합니다.
-t, --tray : 시스템 트레이에 숨깁니다.
-x, --exit : 마운트된 드라이브가 없으면 종료합니다.
-l, --list : 사용 가능한 드라이브 문자와 마운트된 파일 시스템을 나열합니다.
-ld:\p, --list=d:\p : 일반 텍스트 및 암호화된 파일 이름을 나열합니다.
-C, --csv : 파일 목록을 쉼표로 구분합니다.
-D, --dir : 디렉터리를 먼저 나열하고 끝에 \를 붙입니다.
-Mpath, --transform=path : 전체 경로를 변환합니다 (암호화 또는 복호화).
-i, --info=D : 마운트된 파일 시스템의 정보를 표시합니다.
-v, --version : 버전을 출력합니다 (cppcryptfsctl의 버전은 --init -v로 확인).
-h, --help : 이 도움말 메시지를 표시합니다.
-I, --init=PATH : PATH에 위치한 암호화된 파일 시스템을 초기화합니다.
-V, --volumename=NAME : 파일 시스템의 볼륨 이름을 지정합니다.
-T, --plaintext : 파일 이름을 일반 텍스트로 사용합니다 (기본값은 AES256-EME).
--deterministicnames : gocryptfs.diriv 파일 생성을 비활성화합니다.
-S, --siv : 데이터 암호화에 AES256-SIV를 사용합니다 (기본값은 GCM).
-L, --longnames [1|0] : 긴 파일 이름을 활성화(1) 또는 비활성화(0)합니다 (기본값은 활성화).
-b, --streams [1|0] : 스트림을 활성화(1) 또는 비활성화(0)합니다 (기본값은 활성화).
--longnamemax N : 파일 이름을 최대 N자로 제한합니다.
--scryptn N : 비밀번호의 Scrypt 해싱에 필요한 메모리를 설정합니다.
--changepassword=PATH : 마스터 키를 보호하는 비밀번호를 변경합니다.
--printmasterkey=PATH : 마스터 키를 사람이 읽을 수 있는 형식으로 출력합니다.
--recover=PATH : 마스터 키와 새 비밀번호를 입력하여 복구합니다.
파일 시스템 생성 : cppcryptfsctl만 명령줄에서 파일 시스템을 생성할 수 있습니다(--init). cppcryptfs로 파일 시스템을 생성하려면 GUI를 사용해야 합니다.
비밀번호 입력 : 파일 시스템을 초기화할 때, cppcryptfsctl은 대화형으로 실행되면 비밀번호를 에코 없이 요청합니다. 표준 입력이 리디렉션된 경우, 프롬프트 없이 표준 입력에서 비밀번호를 읽습니다.
버전 확인 : cppcryptfsctl의 버전은 --init -v로 확인합니다. 그렇지 않으면 실행 중인 cppcryptfs의 버전을 출력합니다.
공통 옵션 : --config와 --reverse는 초기화와 마운트 모두에 사용됩니다.
옵션 형식 : 짧은 옵션(-m)은 등호 없이 사용하고, 긴 옵션(--mount)은 등호를 선택적으로 사용할 수 있습니다. 예:
text
복사
cppcryptfs -m c:\tmp\test -d k -p XYZ cppcryptfs --mount=c:\tmp\test --drive=k --password=XYZ
드라이브 문자 지정 : 드라이브 문자에 마운트할 때는 \를 포함하지 마세요. 예: -dr: (올바름), -dr:\ (잘못됨).
인수 없이 사용 시, 사용 가능한 드라이브 문자와 마운트된 파일 시스템의 경로를 나열합니다.
전체 경로를 인수로 제공하면, 해당 파일 또는 디렉터리의 암호화되지 않은 이름과 암호화된 이름을 나열합니다.
짧은 형식(-l)을 사용할 때는 경로를 -l 바로 뒤에 붙여야 합니다. 긴 형식(--list)은 =를 사용해야 합니다. 예:
text
복사
cppcryptfs -lk:\foo cppcryptfs --list=k:\foo
cppcryptfs는 한 번에 하나의 인스턴스만 실행할 수 있습니다.
실행 중인 인스턴스가 있으면, 새 인스턴스는 명령줄 옵션을 처리하지 않고 종료됩니다. 인스턴스가 없으면 명령줄 옵션을 처리하고 --exit가 지정되지 않은 한 계속 실행됩니다.
배치 파일에서 사용하려면 먼저 백그라운드에서 인스턴스를 시작한 후, 다른 작업을 포그라운드에서 수행해야 합니다.
batch
복사
@rem 백그라운드에서 cppcryptfs 실행 및 초기화 대기 start cppcryptfs.exe --tray timeout /t 1 >nul @rem 드라이브 U: 마운트 cppcryptfs.exe --mount=d:\TestCppCryptFS --drive=u --password=PASSWORD --tray --exit @rem 드라이브 V: 마운트 cppcryptfs.exe --mount=d:\TestCppCryptFS2 --drive=v --password=PASSWORD --tray --exit @rem 마운트된 드라이브로 파일 복사 copy C:\test.txt U:\test.txt copy C:\test.txt V:\test.txt
bash
복사
#!/bin/bash # 백그라운드에서 cppcryptfs를 시스템 트레이에 숨겨 실행 /cygdrive/c/bin/cppcryptfs -t & # 초기화 대기 sleep 1 # 파일 시스템 마운트 및 완료 대기 /cygdrive/c/bin/cppcryptfs --mount c:\\tmp\\test -d k -p XYZ # 백업 작업 수행 rsync ..... # 모든 드라이브 마운트 해제 및 종료 /cygdrive/c/bin/cppcryptfs -u all -x
--scryptn은 gocryptfs.conf에 저장된 비밀번호를 복호화하는 데 필요한 RAM의 양을 제어하는 매개변수입니다. 기본값은 16으로, 이는 약2 16 ×1024=64 메가바이트의 RAM을 필요로 합니다.
OWASP.org 는 공격자의 복호화 속도를 늦추기 위해 현재 17(128MB)을 사용하는 것을 권장합니다. 그러나 기본값은 여전히 16이며, 이는 gocryptfs에서 설정된 기본값이기 때문입니다.
지원되는 scryptn 값은 10(1MB)에서 20(1GB)까지입니다. gocryptfs는 최대 28까지 허용하지만, 개발자가 사용하는 16GB RAM이 장착된 Windows PC에서는 20을 초과하는 값은 작동에 실패합니다.
cppcryptfsctl은 설정 파일(일반적으로 gocryptfs.conf 또는 .gocryptfs.reverse.conf)에서 마스터 키를 보호하는 비밀번호를 변경할 수 있는 기능을 제공합니다.
이 기능은 주로 다른 비밀번호를 사용하고자 하는 사용자를 위한もので, 비밀번호가 유출되었을 때의 대처로는 적합하지 않습니다.
비밀번호 변경은 파일 시스템을 마운트하는 데 사용되는 비밀번호만 변경하며, 데이터 암호화에 사용되는 실제 키는 변경되지 않습니다. 이는 데이터 암호화에 사용되는 키가 비밀번호에서 파생된 키로 암호화되어 설정 파일에 저장되기 때문입니다. 따라서 비밀번호는 실제 암호화 키를 복호화하는 데만 사용됩니다.
결과적으로, 누군가가 이전 비밀번호와 이전 설정 파일의 사본을 가지고 있다면, 비밀번호를 변경한 후에도 데이터를 복호화할 수 있으며, 이후 추가하거나 수정한 데이터도 복호화할 수 있습니다.
비밀번호가 유출되었다고 의심되고, 누군가가 이미 설정 파일을 가지고 있을 가능성이 있다면, 최선의 방법은 새로운 비밀번호로 새 파일 시스템을 생성한 후, 기존 파일 시스템을 마운트하여 데이터를 새 파일 시스템의 암호화되지 않은 뷰로 복사하는 것입니다.
--scryptn을 지정하면, 비밀번호를 변경하면서 scryptn 값도 함께 변경할 수 있습니다.
비밀번호를 분실한 경우, 미리 복호화된 마스터 키를 출력하여 저장해둔 경우에만 복구가 가능합니다.
다음 명령어를 실행하면:
bash
복사
cppcryptfsctl --printmasterkey PATH
(PATH는 암호화된 파일 시스템 디렉터리 또는 설정 파일의 경로입니다.)
마스터 키를 인간이 읽을 수 있는 형식으로 출력합니다. 예를 들어, 이를 인쇄하여 잠긴 서랍에 보관할 수 있습니다.
비밀번호를 잊어버린 경우, 다음 명령어를 사용할 수 있습니다:
bash
복사
cppcryptfsctl --recover PATH
이 명령어는 마스터 키를 입력하라는 프롬프트를 표시하며, 이후 새로운 비밀번호를 입력하고 확인하라는 프롬프트가 나타납니다.
이 작업은 대상 설정 파일의 마스터 키를 덮어씁니다. 작업 전에 설정 파일의 백업을 생성하며, 백업 파일은 설정 파일 이름에 .bak을 추가하여 저장됩니다. .bak 파일이 이미 존재하는 경우, 기존 .bak 파일을 삭제하거나 다른 곳으로 이동하라는 메시지가 표시됩니다.
--scryptn을 지정하면, 파일 시스템을 복구하면서 scryptn 값도 함께 변경할 수 있습니다.
이 번역은 scryptn, 비밀번호 변경, 비밀번호 복구에 대한 모든 세부 사항을 포함하며, 사용자가 별도의 참조 없이 이해할 수 있도록 완전하게 작성되었습니다.
--scryptn은 gocryptfs.conf에 저장된 비밀번호를 복호화하는 데 필요한 RAM의 양을 제어합니다. 기본값은 16이며, 이는 복호화에 약 16 ×1024=64 메가바이트의 RAM을 필요로 합니다.
OWASP.org 는 현재 공격자를 더 지연시키기 위해 17(128MB)의 값을 사용하는 것을 권장합니다. 16이 여전히 기본값인 이유는 이것이 gocryptfs의 기본값이기 때문입니다.
scryptn에 대해 지원되는 값은 10(1MB)에서 20(1GB)까지입니다. gocryptfs는 최대 28까지 허용하지만, 개발자의 16GB RAM이 장착된 Windows PC에서는 20을 초과하는 값은 실패합니다.
cppcryptfsctl은 설정 파일(일반적으로 gocryptfs.conf 또는 .gocryptfs.reverse.conf)에서 마스터 키를 보호하는 비밀번호를 변경할 수 있는 기능을 제공합니다.
이 기능은 주로 다른 비밀번호를 사용하고자 하는 사람들을 위한 것입니다. 이는 비밀번호가 유출되었을 때의 좋은 해결책이 아닙니다.
비밀번호를 변경하는 것은 파일 시스템을 마운트하는 데 사용되는 비밀번호만 변경합니다. 데이터를 암호화하는 데 사용되는 암호화 키는 변경되지 않습니다. 이는 데이터를 암호화하는 데 사용되는 키가 비밀번호에서 파생된 키를 사용하여 암호화되어 설정 파일에 저장되기 때문입니다. 따라서 비밀번호는 실제 암호화 키를 복호화하는 데만 사용됩니다.
따라서 누군가가 당신의 비밀번호와 이전 설정 파일의 사본을 가지고 있다면, 비밀번호를 변경한 후에도 데이터를 복호화할 수 있으며, 이후 추가하거나 변경한 데이터도 복호화할 수 있습니다.
비밀번호가 유출되었다고 생각하고, 누군가가 이미 설정 파일을 가지고 있을 수 있다고 생각한다면, 최선의 방법은 새로운 비밀번호로 새로운 파일 시스템을 생성하고, 이를 마운트한 후, 이전 파일 시스템을 마운트하여 이전 파일 시스템의 암호화되지 않은 뷰에서 새 파일 시스템의 암호화되지 않은 뷰로 데이터를 복사하는 것입니다.
--scryptn을 지정하면, 비밀번호를 변경할 때 scryptn도 함께 변경할 수 있습니다.
잃어버린 비밀번호로부터 복구하는 것은 암호화되지 않은 마스터 키를 인쇄하여 저장해둔 경우에만 가능합니다.
다음 명령어를 실행하면:
bash
복사
cppcryptfsctl --printmasterkey PATH
(PATH는 암호화된 파일 시스템 디렉터리 또는 설정 파일의 경로입니다.)
암호화되지 않은 마스터 키를 인간이 읽을 수 있는 형식으로 출력합니다. 예를 들어, 이를 인쇄하여 잠긴 서랍에 보관할 수 있습니다.
비밀번호를 잊어버린 경우, 다음 명령어를 실행할 수 있습니다:
bash
복사
cppcryptfsctl --recover PATH
이 명령어는 마스터 키를 입력하라는 프롬프트를 표시하고, 이후 새로운 비밀번호를 입력하고 확인하라는 프롬프트를 표시합니다.
이 작업은 대상 설정 파일의 마스터 키를 덮어씁니다. 이 작업을 수행하기 전에 설정 파일의 백업을 생성합니다. 백업 파일은 설정 파일 이름에 .bak을 추가하여 명명됩니다. .bak 파일이 이미 존재하는 경우, 기존 .bak 파일을 삭제하거나 다른 곳으로 이동하라는 메시지가 표시됩니다.
--scryptn을 지정하면, 파일 시스템을 복구할 때 scryptn도 함께 변경할 수 있습니다.
설정 파일이 손실되거나 손상된 경우, 복구는 복호화된 마스터 키 가 있는 경우에만 가능합니다. 아래는 복구 절차와 주의사항입니다.
마스터 키 출력 및 저장
cppcryptfsctl --printmasterkey PATH 명령어를 사용하세요. 여기서 PATH는 암호화된 파일 시스템 디렉터리 또는 설정 파일의 경로입니다.
이 명령어는 마스터 키를 사람이 읽을 수 있는 형태로 출력합니다.
출력된 마스터 키를 안전하게 저장하세요 (예: 종이에 인쇄하여 잠긴 서랍에 보관).
새 파일 시스템 생성
복구하려는 기존 파일 시스템을 만들 때 사용했던 것과 동일한 매개변수(예: 데이터 암호화 방식, 파일 이름 암호화 방식, 긴 파일 이름 설정 등)로 새 파일 시스템을 생성합니다. 단, 경로는 달라도 됩니다.
이 단계에서 사용할 비밀번호는 중요하지 않습니다.
마스터 키 복구
cppcryptfsctl --recover PATH 명령어를 사용하여 이전 파일 시스템의 마스터 키를 새 설정 파일에 입력합니다.
이 과정에서 새 설정 파일의 기존 마스터 키는 사용자가 입력한 마스터 키로 대체되며, 새로 선택한 비밀번호로 암호화됩니다.
마운트 및 확인
새 설정 파일을 사용하여 이전 파일 시스템을 마운트합니다. 이때 새 설정 파일의 경로를 지정하세요.
데이터가 정상적으로 읽히는지 확인합니다.
설정 파일 배치
여기서 유일한 문제점은 gocryptfs 또는 cppcryptfs의 1.3 이전 버전(2017년 4월/5월에 릴리스됨)으로 생성된 파일 시스템을 가지고 있는 경우, HKDF와 Raw64로 인해 문제가 발생할 수 있다는 것입니다. 이들은 이제 기본값이며, 이들 없이 설정 파일을 생성할 방법이 없습니다.
따라서 복구하려는 오래된 파일 시스템이 작동하지 않는다면, 복구를 위해 생성한 설정 파일을 편집하여 다음 줄을 제거해 보세요:
"HKDF",
"Raw64",
파일 이름과 경로 길이 제한은 파일 시스템 설정과 기본 파일 시스템 종류에 따라 다릅니다.
"긴 파일 이름" 사용 또는 일반 텍스트 파일 이름 :
"긴 파일 이름"(기본 설정)을 사용하거나 암호화되지 않은 파일 이름을 사용하는 경우:
파일 또는 디렉터리 이름: 최대 255자 .
전체 경로: 최대 약 32,000자 .
조건: NTFS, exFAT, FAT32와 같은 현대적인 파일 시스템 사용 시.
"긴 파일 이름" 미사용 및 암호화된 파일 이름 :
파일 또는 디렉터리 이름: 최대 160자 .
전체 경로: 최대 약 32,000자 (NTFS, exFAT, FAT32 사용 시).
구형 파일 시스템 (FAT16) :
전체 경로: 최대 259자 .
암호화 과정:
파일 이름이 UNICODE-16에서 UTF-8로 변환됩니다 (언어에 따라 문자 수가 증가할 수 있음).
암호화 시 최대 16바이트의 패딩이 추가됩니다.
base64 인코딩으로 길이가 약 33% 증가합니다.
결과적으로 암호화된 파일 이름은 원래 이름보다 상당히 길어질 수 있습니다 .
암호화된 파일 경로 앞에는 암호화된 파일 시스템이 위치한 디렉터리의 경로가 추가됩니다.
현대적인 파일 시스템 사용 : NTFS, exFAT, FAT32를 사용하여 긴 경로를 지원하세요. FAT16과 같은 구형 파일 시스템은 피하는 것이 좋습니다.
Windows 프로그램 한계 :
Windows 파일 탐색기를 포함한 많은 프로그램은 경로가 259자를 넘으면 문제를 일으킬 수 있습니다.
암호화된 파일 이름을 사용하는 경우, 긴 경로를 지원하는 서드파티 파일 관리자 를 사용하는 것이 좋습니다.
파일 시스템 이동 시 주의 :
암호화된 파일 시스템의 루트를 이동할 때는 오류를 방지하기 위해 복사 후 삭제 방식을 사용하세요.
Windows API는 파일 이름에 대해 대소문자를 구분하지 않지만, Windows 파일 시스템(NTFS 및 FAT32)은 파일 이름의 대소문자를 보존합니다.
Windows에서 "Foo.txt"로 파일을 생성한 후 "foo.txt"로 열려고 해도 정상적으로 열립니다.
대부분의 소프트웨어는 파일을 생성할 때 사용된 대소문자와 동일하게 파일을 엽니다. 그러나 일부 소프트웨어는 그렇지 않을 수 있습니다.
cppcryptfs는 원래 암호화된 파일 이름을 사용할 경우 항상 대소문자를 구분했습니다. 이는 gocryptfs의 동작 방식과 동일합니다.
따라서 암호화된 파일 이름을 사용할 경우, "Foo.txt"로 생성된 파일을 "foo.txt"로 열려고 하면 파일을 찾을 수 없었습니다.
이제 cppcryptfs는 "대소문자 구분 없음" 설정을 제공하여, 암호화된 파일 이름을 사용할 때도 순방향(일반) 모드에서 대소문자를 구분하지 않도록 할 수 있습니다.
역방향 모드에서는 암호화된 파일 이름을 사용할 경우, "대소문자 구분 없음" 설정과 관계없이 항상 대소문자를 구분합니다. 이는 파일 시스템을 백업할 때 암호화된 파일 이름의 대소문자가 변경되면, 이후 순방향 모드로 마운트할 때 파일 이름이 올바르게 복호화되지 않을 수 있기 때문입니다.
일반 텍스트 파일 이름을 사용할 경우, 순방향 및 역방향 모드 모두에서 "대소문자 구분 없음" 설정과 관계없이 항상 대소문자를 구분하지 않습니다.
아래는 벤치마크 결과입니다. 테스트는 Windows 10 64비트, Intel i5-4200U CPU, Crucial M500 240GB SSD에서 Cygwin 유틸리티를 사용하여 수행되었습니다. cppcryptfs는 AES256-GCM으로 파일 데이터를 암호화하고, 암호화된 파일 이름과 긴 파일 이름을 사용했습니다.
테스트 중 Windows Defender의 실시간 검사는 비활성화되었습니다. 실시간 검사가 활성화된 상태에서 네이티브 NTFS에 linux-3.0.tar.gz를 추출하는 데 2분 43.600초가 소요되었습니다.
cppcryptfs는 암호화를 수행하지 않는 Dokany의 미러 샘플 프로그램과 유사한 성능을 보입니다. 사용된 SSD는 스트리밍 쓰기 성능이 250 MB/s입니다.
작업 | cppcryptfs | 네이티브 NTFS | Dokany 미러 |
---|---|---|---|
스트리밍 쓰기 | 168 MB/s | 224 MB/s | 181 MB/s |
linux-3.0.tar.gz 추출 | 1분 36.412초 | 0분 21.291초 | 1분 34.125초 |
ls -lR linux-3.0 | 1분 1.979초 | 0분 2.983초 | 1분 11.618초 |
linux-3.0 삭제 | 1분 28.749초 | 0분 10.144초 | 1분 24.677초 |
위 벤치마크는 오래 전에 수행되었습니다. gocryptfs의 제작자는 최근 cppcryptfs와 다른 암호화 파일 시스템을 Windows에서 비교하는 유사한 벤치마크를 발표했습니다.
https://nuetzlich.net/gocryptfs/comparison/#performance-on-windows
일부 결과는 위 벤치마크보다 빠르지만, 대부분은 느립니다. 이는 테스트 중 Windows Defender의 실시간 보호가 활성화되어 있었기 때문일 수 있습니다. 모든 암호화 파일 시스템이 동일한 방식으로 영향을 받은 것으로 보입니다.
cppcryptfs는 gocryptfs v0.7 이상에서 생성된 모든 파일 시스템을 마운트할 수 있습니다. 마찬가지로, "긴 파일 이름 = off"로 cppcryptfs에서 생성된 파일 시스템은 gocryptfs v0.7 이상에서 마운트할 수 있습니다. "긴 파일 이름 = on"으로 생성된 파일 시스템은 gocryptfs v0.9 이상에서 마운트할 수 있습니다.
gocryptfs 호환성 매트릭스는 더 자세한 정보를 제공합니다. cppcryptfs는 DirIV, EMENames(암호화된 파일 이름을 사용하고 일반 텍스트 파일 이름을 사용하지 않는 경우), GCMIV128 기능 플래그를 요구합니다. 또한 LongNames를 지원하며, 플래그를 켜고 끄는 파일 시스템을 생성할 수 있습니다.
참고: cppcryptfs는 이제 gocryptfs와 버전 번호를 일치시켜 호환성을 나타냅니다. cppcryptfs는 현재 버전 1.4이며, gocryptfs 1.4에서 생성된 모든 파일 시스템을 마운트할 수 있어야 합니다.
이 번역은 사용자가 별도의 참조 없이도 내용을 완전히 이해할 수 있도록 완전하고 명확하게 작성되었습니다. 기술 용어는 적절히 번역되었으며, 필요한 경우 원문의 의미를 유지하기 위해 영어 용어를 그대로 사용했습니다.
제가 설명 보다 이미 깃허브 해서 설명이 매우 정확합니다
다운로드
https://github.com/bailey27/cppcryptfs?tab=readme-ov-file