ddr_crypt(1) / dd_rescue (NAME) ddr_crypt - dd_rescue (SYNOPSIS) -L crypt[=option[:option[:...]]] -L /path/to/libddr_crypt.so[=option[:option[:...]]] (DESCRIPTION) (About) dd_rescue . AES x86 ( AESNI) ARMv8 . dd_rescue . dd_rescue dd_rescue(1) . (OPTIONS) dd_rescue : (crypt) (=) (:) . crypt . ( IV) . (Help) help ddr_crypt . (Encryption or Decryption) crypt dd_rescue ( ddr_crypt libddr_crypt.so ) . enc[rypt] dec[rypt] . / (De/encryption algorithm) crypt / AES . : algo=AESxxx-yyy xxx 128 192 256 +128 +192 +256 128x2 192x2 256x2 yyy ECB CBC CTR . algo=help . << >> . . . (AES192-CTR) /IV . (Crypto engine) AES : engine=aesni AES AESNI x86 ( Westmere ) . (cache timing attacks) . . engine=aesarm64 AES AESv8 ARMv8 ( AArch64 64 ARM) ( / Cortex A53 A57 A72 Kryo A7x ). . . engine=aes_c AES C rijndael . . (prefetching) . engine=openssl openssl AES . openssl + ( ) . aesni x86 aesarm64 ARMv8 aes_c . (Padding) AES ( ) (Padding) . pad=zero . . . pad=always PKCS7 openssl . . . . pad=asneeded zero always . PKCS7 . ( ) / ( / ). ! CTR ddr_crypt pad . (Debugging and Benchmarking) debug ddr_crypt . outkeyiv (IV) . benchmark / . (Setting key and IV) IV ( CBC- CTR-) . (Setting directly) keyhex= ivhex= . ASCII /IV ( 0x ) . /IV ( /proc ). . ddr_crypt X . (Reading from file or file descriptor) IV keyfd= ivfd= . x /IV . @OFF@LEN ( ) . 0 . dd_rescue . keyfile= ivfile= . @OFF@LEN IV . ( .) ( ) ddr_crypt IV . IV (Generating random key and IV) IV . : keygen ivgen . /IV ( !). . (Index files) IV MD5SUMS : /IV . . ddr_crypt keysfile ivsfile /IV ( ) KEYS.algname IVS.algname MD5SUMS . ( .) /IV ddr_crypt /IV . keygen ivgen ( ). (Extended attributes) IV (xattr) . keyxattr ivxattr . dd_rescue(1) . xattr ( ) xattr . ( xattr http DAV NFS .) kxfallb[ack] ixfallb[ack] ddr_crypt xattr keysfile ivsfile (fallback). IV (Password based key and IV generation) /IV ( <<>> ). () . (salt) . IV ( ) . ddr_crypt pbkdf2() ( IV) ( scrypt) . (brute force) . pbkdf2 pbkdf2 pbkdf2=rounds . ( IV ). openssl IV openssl opbkdf . md5 brute force . ( ) ( ) OpenSSL Salted__ . openssl 1.1 sha256 openssl md sha256- md md5- openssl . opbkdf11 dd_rescue KDF openssl sha256 . sha256 brute force . nosalthdr . openssl 3.0 Salted__ . 3.0 ( ) ( ). ( ) . /IV . ( IV keysfile ivsfile saltsfile saltxattr ). ( ) . keysfile . pass= salt= passfd= passfile= salthex= saltfd= saltfile= IV . ( .) / (null-terminated) CRLF . ( : pass salt salthex) . passfd=0 . saltlen= . saltsfile MD5SUMS ( keysfile ivsfile) . saltsfile . saltgen . (saltsfile) (xattr) ( ) . saltxattr[=xattr_name] . user.salt.ALGNAME ( ALGNAME ). 1.99 ddr_crypt ( ) user.pbkdf . xattr (saltsfile) . sxfallback ddr_crypt . (fallback) pbkdf ( ) . dd_rescue(1) . (ALGORITHMS AND STREAM MODES) AES (Rijndael) . () . . (Plus modes) AES . ( .) C AESNI AES128 192 256 . +AES128 +AES192 +AES256 ( ) . . +AES192 AES256 . . . openSSL . (Double modes) . ( ). AES128x2 AES192x2 AES256x2 . (Stream modes) AES . . ECB ( ) . ... . (known plaintext) . . CBC ( ) CTR . CBC : ( ) . CTR . () XOR . XOR . (one-time pad) . : /IV . : c1 = r1 XOR p1 c2 = r2 XOR p2 ( c = r = AES p = ). r == r1 == r2 : c1 XOR c2 = r XOR p1 XOR r XOR p2 = p1 XOR p2 . CTR : AES ( /IV) . CTR /IV . dd_rescue (Supported dd_rescue features) CTR ( IV ). ( x-) . ECB ( ) . CBC . ddr_crypt skiphole ( ). CTR ECB CBC . skiphole ddr_crypt . . (mod 512) . . ( . .) ( a- dd_rescue) skiphole ddr_crypt (sparse) . ( 1.99.19 ) openssl . : () a- skiphole ( CTR ECB) . dd_rescue ddr_crypt . () . a- . () ( 1.99.19:) a- skiphole . 0 a- . ddr_lzo ddr_crypt ddr_crypt ddr_lzo . CTR . weakrnd . . . openssl (openssl compatibility) openssl enc ( K-) IV ( iv-) ddr_crypt ECB- CBC- . ddr_crypt CTR- . opbkdf ddr_crypt Salted__ openSSL / openssl . . (BUGS/LIMITATIONS) (Maturity) dd_rescue 1.98 . . IV CTR dd_rescue 1.98 . 1.99 . 1.98 ctrbug198 . (Security) (fuzzing) . . (Testing) crypt . (Plugin chain ordering) (dd_rescue ) / ddr_crypt ddr_crypt . CTR . ECB ECB . . . (Future work) : AES twofish ( threefish). /IV pbkdf2. (XTS GCM ...). (EXAMPLES) dd_rescue -ptAL crypt=algo=AES256-CTR:enc:keygen:ivgen:keysfile:ivsfile infile outfile infile AES256 CTR IV () outfile . KEYS.AES256-CTR IVS.AES256-CTR IV . ( !) : dd_rescue -ptAL crypt=algo=AES256-CTR:dec:keysfile:ivsfile outfile infile dd_rescue -AL crypt=AES192+-CTR:enc:saltgen:saltxattr:sxfallback:passfd=0:pbkdf2 infile outfile outfile ( SALTS.AES192+-CTR ) pbkdf2 IV . saltgen . dd_rescue -ptL lzo=compr,crypt=AES256-CTR:enc:keygen:ivgen:keysfile:ivsfile infile outfile ( lzo) . keygen ivgen . ( skiphole ). hash . (SEE ALSO) dd_rescue(1) (AUTHOR) Kurt Garloff (CREDITS) AES AESNI x86 : https://software.intel.com/sites/default/files/article/165683/aes- wp-2012-09-22-v01.pdf AES ARMv8 openSSL Linaro . (COPYRIGHT) dd_rescue : (GPL) - . (HISTORY) ddr_crypt dd_rescue 1.98 ( ) . 1.99 ARMv8 openssl Salted__ . pbkdf xattr ( !) IV / xattr . CTR ( ctrbug198 ). 1.99.19 ( CTR). 1.99.19 . : http://garloff.de/kurt/linux/ddrescue Kurt Garloff 2015-04-15 ddr_crypt(1)