Dm-crypt / LUKS'ta hangi şifreleme ve şifreleme modlarını kullanabileceğimi nasıl belirlerim?


14

Ubuntu tabanlı bir sistem kullanıyorum ve hangi şifre ve şifre modlarının benim için kullanılabilir olduğunu belirlemekte zorlanıyorum.

Cryptsetup man sayfası şöyle diyor:

"Kullanılabilir seçeneklerin listesi için / proc / kripto'ya bakın. Daha fazla seçenek elde etmek için ek çekirdek kripto modülleri yüklemeniz gerekebilir."

/ Proc / kripto paramın içinde çok az var. Hangi ek çekirdek kripto modüllerini yükleyebileceğimi nasıl öğrenebilirim?


/lib/modules/*/kernel/crypto/bakmak olası bir yerdir, ancak modüller dosya sisteminin herhangi bir yerinde olabilir.
Mark

2
Bence bu iyi bir soru. Bu bilgiyi kendim arıyordum. /proc/cryptoharika, ancak geçerli şifre dizelerini listelemiyor; gibi şeyler aes-xts-plain64veya aes-cbc-essiv:sha256. İyi bir cevap bu bilgiyi sağlar ve /lib/modules...bunları kullanmak için hangi modüllerin yüklenmesi gerektiğini gösterir.
starfry

@starfry Bununla da ilgileniyorum. Şifreleme dizesinin ne olması gerektiği ile benim içindekiler arasında bir adlandırma yazışması olmadığından /proc/crypto. Mantıklı değil.
CMCDragonkai

Yanıtlar:


10

Okunacak çok sayıda belge ve kılavuz sayfası var, ancak özellikle ilginizi çekebilecek bir belge LUKS Disk Üzerinde Biçim Belirtimi'dir (PDF).

Ek B (doğal olarak, sonuna yakın) diyor,

Şifre ve Karma özellik kayıt defteri

Bile şifre-ad ve şifre-mod dizeleri herhangi LUKS ameliyatla yorumlanmaz, hepsi uygulamaları farklı LUKS tabanlı uygulamalar arasında uyumluluk elde etmek için aynı anlama sahip olması gerekir. LUKS, temel şifreleme sisteminin şifre adı ve şifre modu dizelerini kullanabilmesini sağlamalıdır ve bu dizeler her zaman şifre sistemine özgü olmayabilir, LUKS'un bunları uygun bir şeyle eşlemesi gerekebilir.

Geçerli şifre adları Tablo 1'de listelenmiştir.

Geçerli şifre modları Tablo 2'de listelenmiştir. Sözleşmeyle, IV ve ince ayar kullanan şifre modları sıfır IV / tweak'ten başlamalıdır. Bu, özellikle anahtar malzeme kullanılırken şifreleme / şifre çözme ilkellerine yapılan tüm çağrılar için geçerlidir. Ayrıca, bu IV'ler / ince ayar şifreleme modları genellikle sektör sınırlarında ince ayarlamalar / IV'ler yeniden oluşturarak şifreleme akışını bağımsız bloklar halinde keser. İlk şifrelenmiş / şifresi çözülmüş blok için sıfır IV / tweak gereksinimi, ilk bloğun sektör 0'da duracak şekilde tanımlanması gerekliliğine eşittir.

Tablo 3, has-spec alanı için geçerli hash özelliklerini listeler . Uyumlu bir uygulamanın tüm şifre, şifre modu veya karma özelliklerini desteklemesi gerekmez.

Tablo 1: Geçerli şifre adları

  • aes - Gelişmiş Şifreleme Standardı - FIPS PUB 197
  • twofish - Twofish: 128-Bit Blok Şifre - http://www.schneier.com/paper-twofish-paper.html     (Aşağıya bakın)
  • yılan - http://www.cl.cam.ac.uk/~rja14/serpent.html
  • oyuncular5 - RFC 2144
  • oyuncular6 - RFC 2612

Tablo 2: Geçerli şifre modları

  • ecb - Şifre çıkışı doğrudan kullanılır
  • cbc-plain - Şifre CBC modunda çalıştırılır. CBC zinciri her sektörü keser ve ilk vektör olarak (32 bit ve küçük endian'a dönüştürülür) sektör numarasıyla yeniden başlatılır. Bu mod [Fru05b], Bölüm 4'te belirtilmiştir.
  • cbc-essiv: hash - Şifre, orijinal anahtarın IV anahtarını oluşturmak için karma kullanılarak ESSIV modunda çalıştırılır . Örneğin, sha256'yı karma olarak kullanırken, şifre modu özelliği “cbcessiv: sha256” dır. ESSIV, [Fru05b], Bölüm 4'te belirtilmiştir.
  • xts-plain64 - http://grouper.ieee.org/groups/1619/email/pdf00086.pdf, plain64 , düz ilk vektörün 64 bit sürümüdür

Tablo 3: Geçerli karma özellikler

  • sha1 - RFC 3174 - ABD Güvenli Karma Algoritması 1 (SHA1)
  • sha256 - FIPS 180-2'ye göre SHA varyantı
  • sha512 - FIPS 180-2'ye göre SHA varyantı
  • ripemd160 - http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html    (Aşağıya bakın)

Editörün Notu: Yukarıdaki şartnameden kopyalanmıştır. Yazıldıktan sonra, bu belgelerin URL'leri değişti:


1

Çekirdekleriniz tarafından desteklenen şifreleri aşağıdaki komutla listeleyebilirsiniz,

[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

Kullanabileceğiniz şifreleri ve karmaları ve G / Ç karşılaştırmasını luksşu komutla listeleyebilirsiniz ,

[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

Belirli şifreleri aşağıdaki komutla karşılaştırabilirsiniz,

[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


Yukarıdaki 58 dosyadan hangisinin kriptsetup uyumlu şifre modlarına dönüştüğünü nasıl anlarsınız?
Anubis

1

Bunu yazdığım anda geçerli olan 5.1 çekirdeği iki farklı formata sahiptir: for şifreleme dizesi, "eski" biçim ve "yeni" biçim. Şimdiye kadar bu sorudaki her şey ve görünüşe göre tüm dokümanlar da "eski" biçimiyle ilgileniyor, bu yüzden burada açıklayacağım. Bu sadece şifreleme içindir. Eğer dm-crypt ile bütünlük kullanılıyorsa, o zaman AEAD şifrelerini düşünmek gerekir ve daha da karmaşıklaşır.

Çekirdek tarafından ayrıştırılan biçim " şifre [ :anahtar sayısı ] -modu -ivmode [ :ivopts ]" şeklindedir. Örnekler: aes-xts-plain64, blowfish-cbc-essiv:sha256, aes:64-cbc-lmk.

  • kodlamada kullanımına şifre, örnekleridiraes,anubis,twofish,arc4, vb çekirdek dm-crypt sürücü şifrelerin bir listesini yoktur. Bu, Linux Kripto API'sına aktarılır, böylece çekirdek tarafından desteklenen herhangi bir uygun şifre kullanılabilir.

  • keycount Şifre ile kullanılacak iki tuş sayısının isteğe bağlı gücü. Bu,lmkivmodehariç her şeyiçin varsayılan olarak 64'tür. Bu, yalnızca LMK için geçerlidir ve 1 dışındaki değerler diğer modlarla düzgün çalışmaz.

  • mod Şifreyle kullanılacak blok zincirleme modu. Örnek olarakecb,cbc,xts. ecbHiçbir IV kullanmadığınıbilmek dışında, md-crypt sürücüsü bunu Linux Crypto API'sine geçirir ve çekirdek tarafından desteklenen herhangi bir zincirleme modunu kullanabilir.

  • ivmode Her sektör için başlatma vektörünü (IV) oluşturmak için kullanılan algoritma. Tipik simetrik anahtar şifrelemesinde, dm-crypt'in aksine, IV şifreleme veya şifre çözme sırasında anahtarla birlikte şifreye geçirilen başka bir veri parçasıdır. Tüm operasyon için sadece bir IV geçti. Dm-crypt'in her sektörü ayrı ayrı okuyabilmesi ve yazabilmesi gerektiğinden, tüm diski tek bir işlem olarak şifrelemez. Bunun yerine, her sektör için bir IV vardır. IV'ü veri olarak iletmek yerine, IV'leri oluşturmak için bir algoritma burada belirtilir. IV nesil şifre tarafından yapılmadığından ve izin verilen ivmode değerleri dm-crypt sürücüsü olarak tanımlandığından bu, Linux Kripto API'sının bir parçası değildir. Onlar:

    • plain, plain64, plain64be, benbi Bunlar basitçe IV olarak, çeşitli biçimlerde, sektör numarası kullanın. Basit ve öngörülebilir bir IV kullanırken filigran gibi saldırılara karşı koymak için tasarlanmış XTS gibi blok modları içindir. plain64en çok tavsiye edilen gibi görünüyor.
    • nullIV her zaman sıfırdır. Test ve geriye dönük uyumluluk için bunu kullanmamalısınız.
    • lmk Loop-AES şifreleme şeması ile uyumludur.
    • tcw TrueCrypt ile uyumludur.
    • essivAnahtar karmasıyla şifrelenmiş sektör numarasını kullanır. Basit bir IV benzeri kullanırken çeşitli saldırılara karşı dirençli olmayan CBC gibi modlar içindir plain64.
  • ivopts Diğer modlar için yok sayılanessiv ivmode ile kullanılacak karma.

Özel bir durum, "Farklı şifre-plain " veya sadece " şifre " "olarak yorumlanır şifre-cbc-plain ". Başka bir özel durum, ecbmodun belirtilecek ivmode olmamasıdır.

Bunun önemi /proc/crypto

Bununla ilgili olarak /proc/crypto, sadece şifre ve mod önemlidir. dm-crypt ile " mode (cipher) " biçiminde bir Crypto API belirtimi oluşturun ve bunu çekirdekten isteyin. Bu, bir bakmak gereken budur /proc/cryptoolarak namebir için skcipher. Misal:

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

typeArasında skcipherbu bir simetrik anahtar şifreleme ne dm-crypt kullanımları ve adını gösterir xts(aes)yazılı olacağını aes-xtsdm-crypt ile belirtildiğinde. keysizeBu şifre ile kullanılabilecek anahtar hangi boyuttaki alanları da bize.

Bu bir modüldeyse, modül adı modulesatırda görünebilir . Bununla birlikte, birçok şifre (genellikle donanıma özel bir kodu olmayan yazılımlarda olanlar), son kodlayıcıyı üretmek için genel blok zincirleme kodu ile birleştirilen genel bir şifre olarak uygulanır. Örneğin:

name         : xts(anubis)
driver       : xts(ecb(anubis-generic))
module       : kernel
type         : skcipher

name         : anubis
driver       : anubis-generic
module       : anubis
type         : cipher

Bu durumda, anubis şifresi, xts(anbuis)bir modülü atanmış olan nihai şifreyi üretmek için çekirdek XTS blok zincirleme modu koduyla birleştirilir kernel. Ancak bunu elde etmek için anubismodülden gelen genel anubis şifresine ihtiyacımız var . Çoğu şifre, bunları yüklemek için kullanılabilecek " crypto-şifre " modül takma adına sahiptir , örneğin modprobe crypto-anubisanubis şifresini sağlayan modülü yükler.

cryptsetup benchmarkKomutu kullanırken , sadece şifre ve mod önemlidir, çünkü karşılaştırılan her şey budur. Eğer mod CBC belirtilmezse varsayılan değildir. İvmode tamamen göz ardı edilir. Böylece, benchmarking için, aes, aes-cbc, ve aes-cbc-foobartüm eşdeğerdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.