dm-crypt / LUKS에서 사용할 수있는 암호 및 암호 모드를 어떻게 확인합니까?


14

우분투 기반 시스템을 사용하고 있는데 사용 가능한 암호 및 암호 모드를 결정하는 데 어려움이 있습니다.

cryptsetup 매뉴얼 페이지는 다음과 같이 말합니다.

"사용 가능한 옵션 목록은 / proc / crypto를 참조하십시오. 더 많은 옵션을 얻으려면 추가 커널 암호화 모듈을로드해야 할 수도 있습니다."

내 / proc / crypto에는 거의 없습니다. 어떤 추가 커널 암호화 모듈을로드 할 수 있는지 어떻게 알 수 있습니까?


/lib/modules/*/kernel/crypto/볼만한 곳이지만 모듈은 파일 시스템의 어느 곳에 나있을 수 있습니다.
Mark

2
좋은 질문이라고 생각합니다. 이 정보를 직접 찾고 있습니다. /proc/crypto훌륭하지만 유효한 암호 문자열을 나열하지 않습니다. aes-xts-plain64또는 같은 것 aes-cbc-essiv:sha256. 좋은 대답은 해당 정보를 제공하고 모듈 /lib/modules...을 사용하기 위해 어떤 모듈을 로드 해야하는지 보여줍니다 .
starfry

@starfry 나는 이것에도 관심이 있습니다. 암호 문자열과 my 내부에 이름이 일치하지 않기 때문 /proc/crypto입니다. 말이되지 않습니다.
CMCDragonkai

답변:


10

읽어야 할 많은 문서와 매뉴얼 페이지가 있지만 특히 관심을 가질만한 하나의 문서는 LUKS 온 디스크 형식 사양 (PDF)입니다.

부록 B (자연스럽게 말미에)는 다음과 같이 말합니다.

암호 및 해시 사양 레지스트리

짝수 경우 암호 이름암호 모드 문자열이 어떤 LUKS 조작으로 해석되지 않습니다, 그들은 모든 구현은 다른 LUKS 기반 구현 간의 호환성을 달성하기위한 동일한 의미를 가지고 있어야합니다. LUKS는 기본 암호 시스템이 암호 이름 및 암호 모드 문자열을 사용할 수 있도록해야하며, 이러한 문자열이 항상 암호 시스템에 고유하지는 않으므로 LUKS는이를 적절한 것으로 맵핑해야합니다.

유효한 암호 이름은 표 1에 나열되어 있습니다.

유효한 암호 모드는 표 2에 나열되어 있습니다. 계약에 따라 IV 및 비틀기를 사용하는 암호 모드는 모두 0부터 IV / 비틀기부터 시작해야합니다. 이는 특히 키 자료를 처리 할 때 암호화 / 암호 해독 프리미티브에 대한 모든 호출에 적용됩니다. 또한, 이들 IV / 비틀림 암호 모드는 일반적으로 섹터 경계에서 비틀림 / IV를 시드함으로써 암호 스트림을 독립적 인 블록으로 절단한다. 첫 번째 암호화 / 암호 해독 된 블록에 대한 제로 IV / 비틀기 요구 사항은 첫 번째 블록이 섹터 0에 있도록 정의 된 요구 사항과 같습니다.

표 3에는 해시 스펙 필드에 유효한 해시 스펙이 나열되어 있습니다. 호환 구현은 모든 암호, 암호 모드 또는 해시 사양을 지원할 필요는 없습니다.

표 1 : 유효한 암호 이름

  • aes-고급 암호화 표준-FIPS PUB 197
  • twofish-Twofish : 128 비트 블록 암호-http://www.schneier.com/paper-twofish-paper.html     (아래 참조)
  • 뱀-http://www.cl.cam.ac.uk/~rja14/serpent.html
  • cast5-RFC 2144
  • cast6-RFC 2612

표 2 : 유효한 암호 모드

  • ecb-암호 출력이 직접 사용됩니다
  • cbc-plain-암호는 CBC 모드에서 작동합니다. CBC 체인은 모든 섹터를 절단하고 섹터 번호를 초기 벡터 (32 비트 및 리틀 엔디안으로 변환)로 다시 초기화합니다. 이 모드는 4 장 [Fru05b]에 지정되어 있습니다.
  • CBC-essiv : 해시 - 사이퍼를 이용 ESSIV 모드에서 동작 해시 본래 키의 IV 키를 생성하기 위해. 예를 들어 sha256을 해시로 사용하는 경우 암호 모드 사양은 "cbcessiv : sha256"입니다. ESSIV는 4 장 [Fru05b]에 지정되어 있습니다.
  • xts-plain64-http: //grouper.ieee.org/groups/1619/email/pdf00086.pdf , plain64 는 일반 초기 벡터의 64 비트 버전입니다.

표 3 : 유효한 해시 사양

  • sha1-RFC 3174-미국 보안 해시 알고리즘 1 (SHA1)
  • sha256-FIPS 180-2에 따른 SHA 변형
  • sha512-FIPS 180-2에 따른 SHA 변형
  • ripemd160-http : //www.esat.kuleuven.ac.be/~bosselae/ripemd160.html    (아래 참조)

편집자 주 : 상기 내용은 사양서에서 복사 한 것입니다. 작성 후이 문서의 URL이 다음과 같이 변경되었습니다.


1

다음 명령으로 커널에서 지원하는 암호를 나열 할 수 있습니다.

[root@arif]# ls /lib/modules/[your kernel version]/kernel/crypto/
algif_rng.ko.xz   blowfish_common.ko.xz   cmac.ko.xz               cts.ko.xz          gf128mul.ko.xz           michael_mic.ko.xz  rsa_generic.ko.xz      tgr192.ko.xz           xts.ko.xz
ansi_cprng.ko.xz  blowfish_generic.ko.xz  crc32_generic.ko.xz      deflate.ko.xz      ghash-generic.ko.xz      pcbc.ko.xz         salsa20_generic.ko.xz  twofish_common.ko.xz   zlib.ko.xz
anubis.ko.xz      camellia_generic.ko.xz  crct10dif_common.ko.xz   des_generic.ko.xz  jitterentropy_rng.ko.xz  pcrypt.ko.xz       seed.ko.xz             twofish_generic.ko.xz
arc4.ko.xz        cast5_generic.ko.xz     crct10dif_generic.ko.xz  dh_generic.ko.xz   khazad.ko.xz             rmd128.ko.xz       serpent_generic.ko.xz  vmac.ko.xz
async_tx          cast6_generic.ko.xz     cryptd.ko.xz             drbg.ko.xz         lrw.ko.xz                rmd160.ko.xz       sha512_generic.ko.xz   wp512.ko.xz
authencesn.ko.xz  cast_common.ko.xz       crypto_null.ko.xz        fcrypt.ko.xz       mcryptd.ko.xz            rmd256.ko.xz       tcrypt.ko.xz           xcbc.ko.xz
authenc.ko.xz     ccm.ko.xz               crypto_user.ko.xz        gcm.ko.xz          md4.ko.xz                rmd320.ko.xz       tea.ko.xz              xor.ko.xz

luks다음 명령을 사용하여 사용할 수있는 암호 및 해시와 I / O 비교를 나열 할 수 있습니다 .

[root@arif arif]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       289342 iterations per second for 256-bit key
PBKDF2-sha256     353293 iterations per second for 256-bit key
PBKDF2-sha512     227555 iterations per second for 256-bit key
PBKDF2-ripemd160  233224 iterations per second for 256-bit key
PBKDF2-whirlpool  236165 iterations per second for 256-bit key
argon2i       4 iterations, 917485 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 951672 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       642.2 MiB/s      2495.8 MiB/s
    serpent-cbc        128b        89.3 MiB/s       542.6 MiB/s
    twofish-cbc        128b       100.4 MiB/s       343.1 MiB/s
        aes-cbc        256b       477.2 MiB/s      1979.2 MiB/s
    serpent-cbc        256b        89.3 MiB/s       538.9 MiB/s
    twofish-cbc        256b       173.3 MiB/s       343.1 MiB/s
        aes-xts        256b      1668.0 MiB/s      1664.1 MiB/s
    serpent-xts        256b       535.7 MiB/s       523.4 MiB/s
    twofish-xts        256b       332.6 MiB/s       339.8 MiB/s
        aes-xts        512b      1384.5 MiB/s      1380.7 MiB/s
    serpent-xts        512b       539.3 MiB/s       524.4 MiB/s
    twofish-xts        512b       335.0 MiB/s       340.1 MiB/s

다음 명령으로 특정 암호를 비교할 수 있습니다.

[root@arif]# ciphers="aes-xts serpent-xts anubis-xts"

[root@arif]# echo "#     Algorithm |       Key |      Encryption |      Decryption";for i in $ciphers ; do cryptsetup benchmark --cipher $i|tail -n 1; done

#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      1613.9 MiB/s      1642.8 MiB/s
    serpent-xts        256b       538.9 MiB/s       521.9 MiB/s
     anubis-xts        256b       182.0 MiB/s       182.1 MiB/s


위의 58 개 파일 중 cryptsetup 호환 암호 모드로 변환 된 파일을 어떻게 알 수 있습니까? anubis-xts를 표시하지 않기 때문에 벤치 마크 명령이 될 수 없습니다 ...
Xen2050

1

필자가이 글을 쓰고있는 현재 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. ecbIV를사용하지 않는것을 알고있는 것 외에, 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가장 일반적으로 권장되는 것으로 보입니다.
    • nullIV는 항상 0입니다. 테스트 및 이전 버전과의 호환성을 위해 이것을 사용해서는 안됩니다.
    • lmk Loop-AES 암호화 체계와 호환됩니다.
    • tcw TrueCrypt와 호환됩니다.
    • essiv키 해시로 암호화 된 섹터 번호를 사용합니다. 간단한 IV를 사용할 때 다양한 공격에 저항력이없는 CBC와 같은 모드를 의미합니다 plain64.
  • ivoptsessiv ivmode 와 함께 사용할 해시로다른 모든 모드에서는 무시됩니다.

특별한 경우, "다른 이름으로 암호-plain "또는 그냥 " 암호 ", "로 해석됩니다 암호-cbc-plain ". 또 다른 특별한 경우는 ecbmode 에 지정할 ivmode 가 없다는 것 입니다.

이것이 어떻게 관련 되는가 /proc/crypto

와 관련 /proc/crypto하여 암호모드 만 관련됩니다. dm-crypt with " mode (cipher) " 형식의 Crypto API 사양을 구성하고 이를 커널에서 요청하십시오. 이것은 하나에서 찾아야 무엇 /proc/crypto으로 nameA에 대한 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-xtsdm-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모두 동일합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.