요약:결과를 실행 cryptsetup benchmark
하고 정렬할 수 있지만 해석에 대한 지침을 찾고 있습니다. 예를 들어 암호화 속도나 복호화 속도 중 어느 것을 더 중요하게 생각해야 합니까? 키 도출 속도가 우선시되어야 할까요? 내 사용 사례가 결과의 가중치/해석에 어떤 영향을 미쳐야 합니까?
문서에 대한 포인터를 제공해 주셔서 감사합니다. 온라인으로 검색했지만 명확한 내용을 보지 못했습니다. 특히 이건 아닌 것 같다.
- ㅏ
cryptsetup
자주하는 질문 - ArchWiki[1]의 관련 섹션에서 논의됨
세부 사항:
저는 2007년경 노트북에 OS를 재설치할 준비를 하고 있습니다(따라서 아마도 AES에 대한 프로세서 지원은 없을 것입니다). 이번에는 LUKS+LVM2를 사용합니다. (이것이 제가 남겨둔 상자입니다 Plain Old Partitions
.) 여러 순차 루프(LUKS + LVM2 + OS 설치, 실제 디스크 벤치마크 실행, 결과 측정)를 실행할 시간이 없습니다. 물론 이는 더 경험적인 지침을 제공할 것입니다. 대신 cryptsetup benchmark
"실제 스토리지 암호화 속도를 직접 예측할 수 없다"는 것을 알고 있음에도 불구하고 합리적인(또는 최적의 :-) LUKS 암호 사양 문자열을 "사전 선택"하려고 했습니다 [2].
이 상자가 실행되면 sudo cryptsetup benchmark
출력은 다음과 같습니다(레이블을 조정하고 질문을 분리한 후 속도를 줄여서 정렬한 후).
# key derivation:
PBKDF2-sha1 557753 iterations per second
PBKDF2-sha256 356173 iterations per second
PBKDF2-ripemd160 336082 iterations per second
PBKDF2-sha512 256000 iterations per second
PBKDF2-whirlpool 112219 iterations per second
# encryption:
# Algorithm | Key | Encryption
serpent-xts 512b 144.7 MiB/s
serpent-xts 256b 144.0 MiB/s
twofish-xts 256b 132.1 MiB/s
twofish-xts 512b 132.0 MiB/s
aes-xts 256b 128.4 MiB/s
aes-cbc 128b 109.7 MiB/s
twofish-cbc 256b 108.2 MiB/s
twofish-cbc 128b 107.9 MiB/s
aes-xts 512b 96.7 MiB/s
aes-cbc 256b 86.5 MiB/s
serpent-cbc 256b 42.1 MiB/s
serpent-cbc 128b 42.1 MiB/s
# decryption:
# Algorithm | Key | Decryption
serpent-cbc 256b 160.0 MiB/s
serpent-cbc 128b 159.5 MiB/s
serpent-xts 512b 149.0 MiB/s
serpent-xts 256b 148.4 MiB/s
twofish-cbc 256b 142.1 MiB/s
twofish-cbc 128b 141.6 MiB/s
twofish-xts 256b 133.5 MiB/s
twofish-xts 512b 133.4 MiB/s
aes-cbc 128b 127.5 MiB/s
aes-xts 256b 126.0 MiB/s
aes-cbc 256b 96.0 MiB/s
aes-xts 512b 95.2 MiB/s
위의 결과는
- 암호화:
serpent-xts/512
가장 빠른 것,serpent-cbc/*
가장 느린 것 - 해독:
serpent-cbc/256
가장 빠르고,serpent-xts/512
세 번째로 빠름 - 주요 내보내기:
sha1
훨씬 빠르다sha256
훨씬 빠르다sha512
확실하지 않습니다. 믿습니다.
sha1
는 곧 폐기될 예정이므로 향후 호환성을 위해 KDF가 에 비해 상당한 속도 이점을 완화(0으로sha1
) 해야 합니다sha256
.- "인증된 사용자가 [워크스테이션에서 키 파생 기능을] 정상적으로 사용하려면 세션당 한 번만 계산하면 됩니다."[3] 따라서 KDF에 비해 KDF의 중요한
sha256
이점을 완화해야 합니다sha512
.
구체적인 질문은 다음과 같습니다.
sha256
키 파생의 상당한 속도 이점( ~= 0.327)을 더 중요하게 생각해야 합니까|356173 - 256000| / ((356173 + 256000)/2)
, 아니면 암호 해독 및 암호화의 적당한 속도 이점sha512
(역시 더 안전하다고 가정함)을 더 중요하게 생각해야 합니까?
보다 일반적인 질문은 다음과 같습니다.
- 사용 사례는 키 파생, 암호 해독 및 암호화에서 속도 중요성의 가중치에 어떤 영향을 미칩니까? 예를 들어, 헤드리스 서버는 헤드리스 워크스테이션보다 암호를 해독하는 데(또는 그렇지 않은 경우) 더 많거나 더 적은 시간이 걸립니까? 읽기에서는 암호 해독이, 쓰기에서는 암호화가 수행된다고 가정하지만 하나의 사용 사례가 읽기 및 쓰기의 상대적 발생/가중치에 어떤 영향을 미치는지 모르겠습니다.
FWIW, 내가 설정하고 있는 상자는 이제 머리를 긁적이게 하는 생산 상자의 두 번째 문자열이 될 것이므로 기본적으로 시간이 걸립니다.
- 편집기 및 브라우저 실행
- SSH 연결 설정
- 비디오 및 음악 재생
- Linux를 사용해보고 싶은 사람들을 위한 대출
- 첫 번째 프로덕션 노트북을 물에 뿌리면 바로 사용할 준비를 하세요.
(이것이 중요한 경우 데비안을 실행합니다.) 물론 저는 일반적으로 느린 성능보다 빠른 성능을 선호하지만(신뢰성이 높을수록 신뢰성이 낮을수록) 보안에 대한 비용을 기꺼이 지불할 의향이 있습니다. 섹스에는 비용이 듭니다.
보다 일반적인 질문은 다음과 같습니다.
키 파생, 복호화 및 암호화 속도의 중요성에 대한 일반적인 순위를 매길 수 있습니까? KDF 속도는 덜 중요하다고 생각합니다[3]. 그러나 대부분의 사용 사례에서는 암호 해독 속도와 암호화 속도가 똑같이 중요합니다. (그러나 ICBW.)
기본적으로 인수 없이 실행하면
cryptsetup benchmark
"일부 일반적인 구성만 측정"[2]하고 "다른 암호나 모드를 벤치마킹하려면--cipher
및--key-size
옵션을 지정하거나--hash
KDF 테스트를 수행해야 합니다."[2] .ArchWiki의 이 섹션이를 수행하는 방법에 대한 자세한 내용이 제공되지만 목록 중 하나 이상을 알지 못합니다.
4.1. 기본이 아닌 암호화에 대한 유효한 옵션 매개변수(비밀번호, 해시, 키 크기, 모드)를 지정합니다 cryptsetup benchmark
. 누구든지 이것에 대한 권위 있는 문서를 알려줄 수 있습니까?
4.2. 현재 기술과 커널 지원을 고려할 때 기본이 아닌 다른 암호를 지정하고 벤치마킹해야 합니다. 제안해 주셔서 감사합니다(적절한 옵션 인수도 제공한다면 :-)
- LUKS 성능을 향상시키는 데 사용할 수 있는 "더 나은" 도구가 있습니까?미리튜닝 비율
cryptsetup benchmark
? 그렇다면 무엇입니까? 튜닝하는 방법?
[1]:예를 들어,https://wiki.archlinux.org/index.php/Dm-crypt/Device_Encryption#Encryption_options_for_LUKS_mode,https://wiki.archlinux.org/index.php/Disk_encryption#Cryptographic_metadata
[2]:달리 info cryptsetup
거나man cryptsetup
[삼]:바라보다https://wiki.archlinux.org/index.php/Disk_encryption#Cryptographic_metadata
답변1
KDF 속도도 중요하지만 생각과는 달리 느려져야 합니다.
LUKS를 사용하면 암호화된 드라이브에는 장치를 암호화하는 데 사용되는 암호화 마스터 키가 포함된 헤더가 포함됩니다. 장치를 부팅하거나 켜면 이 마스터 키는 키 슬롯에 있는 키 중 하나를 사용하여 해독됩니다( cryptsetup luksDump /dev/sdx
LUKS 헤더에 포함된 정보를 살펴보세요).
LUKS 장치를 처음 포맷하면 비밀번호(또는 키 파일)를 묻는 메시지가 표시됩니다. 그런 다음 이 비밀번호는 키 슬롯 0에 추가될 키를 생성하고 암호화하는 데 사용됩니다. 귀하의 비밀번호도 해시되어 저장되므로 장치를 켤 때 LUKS가 올바른 비밀번호를 입력했는지 확인할 수 있습니다. 빠른 해싱 알고리즘을 사용하면 공격자가 더 짧은 시간에 더 많은 조합을 테스트할 수 있기 때문에 암호를 해독하기가 더 쉽기 때문에 이를 이해하는 것이 중요합니다.
따라서 가장 느리고 가장 안전한 해싱 알고리즘(sha512 또는 Whirlpool)을 선택하고 더 높은 --iter-time을 사용해야 합니다. --iter-time 옵션을 사용하면 1회 해시 반복에 필요한 시간을 설정할 수 있습니다. 높은 반복 시간의 유일한 단점은 암호화된 장치를 실제로 여는 데 시간이 너무 오래 걸린다는 것입니다. 루팅된 장치에서 --iter-time 10000(10초)을 사용한다고 가정하면 시스템이 실제 암호화 키를 가져오는 데 10초가 걸리므로 비밀번호를 입력한 후 부팅을 계속하기 전에 오랫동안 기다려야 합니다. . 이는 장치를 켤 때 한 번만 발생하므로 추가 성능에는 영향을 미치지 않습니다.
실제 암호화된 비밀번호는 기본 물리적 장치의 읽기/쓰기 속도와 머신의 작업 부하에 따라 달라집니다. 암호화/복호화는 CPU에서 수행되므로 가장 느린 CPU를 사용하면 동시에 실행되는 다른 프로그램에 영향을 미칠 가능성이 높습니다. 현재로서는 aes-xts-plain64가 가장 안전한 LUKS 암호로 간주되므로 매우 기밀 정보가 있는 경우 키 크기가 512인 aes-xts-plain64를 사용해야 할 것입니다(xts를 사용하면 키가 분할되기 때문입니다). 2 따라서 실제로 256비트 키로 aes를 얻습니다.)
귀하의 설정에 대한 제안을 한다면 반복 시간이 2초에서 10초 사이인 해싱 알고리즘으로 sha512가 될 것이며 AES-128은 여전히 안전한 것으로 간주되므로 키 크기가 256인 aes-xts-plain64를 사용하는 것입니다. .