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.