필자가이 글을 쓰고있는 현재 5.1 커널은 두 가지 다른 형식의 암호 문자열을 가지고있다. "old"형식과 "new"형식. 지금까지이 질문의 모든 내용과 모든 문서도 "오래된"형식을 다루므로 여기에 설명하겠습니다. 이것은 단지 암호화를위한 것입니다. dm-crypt와 함께 무결성을 사용하는 경우 AEAD 암호를 고려해야하며 훨씬 복잡해집니다.
커널이 파싱 한 형식은 " cipher [ :
keycount ] -
mode -
ivmode [ :
ivopts ]"입니다. 예 : aes-xts-plain64
, blowfish-cbc-essiv:sha256
, aes:64-cbc-lmk
.
암호화하기
사용하려면 암호를, 예aes
,anubis
,twofish
,arc4
등 커널 dm-crypt와 드라이버는 암호 목록이 없습니다. 이것은 Linux Crypto API로 전달되므로 커널이 지원하는 적절한 암호를 사용할 수 있습니다.
keycount
암호와 함께 사용할 두 개의 키 중 선택적인 권한. lmk
기본값은 64 인 ivmode를제외한 모든 항목의 기본값은 1입니다.이는 실제로 LMK에만 적용되며 1 이외의 값은 다른 모드에서 제대로 작동하지 않습니다.
mode 암호와 함께 사용할 블록 체인 모드입니다. 예로는ecb
,cbc
,xts
. ecb
IV를사용하지 않는것을 알고있는 것 외에, md-crypt 드라이버는 이것을 Linux Crypto API로 전달하고 커널이 지원하는 모든 체인 모드를 사용할 수 있습니다.
ivmode 각 섹터에 대한 초기화 벡터 (IV)를 생성하는 데 사용되는 알고리즘입니다. 일반적인 대칭 키 암호화에서 dm-crypt와 달리 IV는 암호화 또는 암호 해독시 키와 함께 암호로 전달되는 또 다른 데이터 비트입니다. 전체 작업에 IV가 하나만 전달되었습니다. dm-crypt는 각 섹터를 개별적으로 읽고 쓸 수 있어야하므로 전체 디스크를 단일 작업으로 암호화하지 않습니다. 대신, 각 부문마다 IV가 있습니다. IV를 데이터로 전달하는 대신 IV를 생성하는 알고리즘이 여기에 지정됩니다. IV 생성은 암호로 수행되지 않으며 허용 된 ivmode 값은 dm-crypt 드라이버로 정의되므로이는 Linux Crypto API의 일부가 아닙니다. 그들은:
plain
, plain64
, plain64be
, benbi
이 단순히 IV와 같은 다양한 형식으로, 섹터 번호를 사용합니다. 간단하고 예측 가능한 IV를 사용할 때 워터 마킹과 같은 공격에 저항하도록 설계된 XTS와 같은 블록 모드를 의미합니다. plain64
가장 일반적으로 권장되는 것으로 보입니다.
null
IV는 항상 0입니다. 테스트 및 이전 버전과의 호환성을 위해 이것을 사용해서는 안됩니다.
lmk
Loop-AES 암호화 체계와 호환됩니다.
tcw
TrueCrypt와 호환됩니다.
essiv
키 해시로 암호화 된 섹터 번호를 사용합니다. 간단한 IV를 사용할 때 다양한 공격에 저항력이없는 CBC와 같은 모드를 의미합니다 plain64
.
ivoptsessiv
ivmode 와 함께 사용할 해시로다른 모든 모드에서는 무시됩니다.
특별한 경우, "다른 이름으로 암호-plain
"또는 그냥 " 암호 ", "로 해석됩니다 암호-cbc-plain
". 또 다른 특별한 경우는 ecb
mode 에 지정할 ivmode 가 없다는 것 입니다.
이것이 어떻게 관련 되는가 /proc/crypto
와 관련 /proc/crypto
하여 암호 및 모드 만 관련됩니다. dm-crypt with " mode (
cipher)
" 형식의 Crypto API 사양을 구성하고 이를 커널에서 요청하십시오. 이것은 하나에서 찾아야 무엇 /proc/crypto
으로 name
A에 대한 skcipher
. 예:
name : xts(aes)
driver : xts-aes-aesni
module : kernel
priority : 401
refcnt : 1
selftest : passed
internal : no
type : skcipher
async : yes
blocksize : 16
min keysize : 32
max keysize : 64
ivsize : 16
chunksize : 16
walksize : 16
type
의는 skcipher
이 대칭 키 암호, 무엇 dm-crypt와 사용, 그리고 이름을 나타냅니다 xts(aes)
기록 될 것이다 aes-xts
dm-crypt로 지정합니다. 이 keysize
필드는이 암호에 사용할 수있는 키 크기도 알려줍니다.
모듈에서 가져온 것이면 module
줄 에 모듈 이름이 표시 될 수 있습니다 . 그러나 많은 암호 (일반적으로 하드웨어 특정 코드가없는 소프트웨어의 암호)는 일반 블록 체인 코드와 결합되어 최종 skcipher를 생성하는 일반 암호로 구현됩니다. 예를 들면 다음과 같습니다.
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
이 경우 누비 암호 커널 XTS 최종 암호문 생성하는 모드 코드 체인 블록과 결합 xts(anbuis)
하는 모듈을 할당되었습니다 kernel
. 그러나 이것을 사용하려면 anubis
모듈 의 일반적인 아누비스 암호가 필요합니다 . 대부분의 암호는 그것들을 로딩하는데 사용될 수있는 " crypto-
암호 "라는 모듈 별칭을 가지고 있습니다 modprobe crypto-anubis
.
이 cryptsetup benchmark
명령을 사용할 때는 암호 와 모드 만 중요합니다. 벤치 마크 된 것이 전부이기 때문입니다. 경우 모드는 CBC에 그것을 기본값으로 지정되어 있지 않습니다. ivmode는 완전히 무시됩니다. 따라서, 벤치마킹, aes
, aes-cbc
,과 aes-cbc-foobar
모두 동일합니다.
/lib/modules/*/kernel/crypto/
볼만한 곳이지만 모듈은 파일 시스템의 어느 곳에 나있을 수 있습니다.