2013-04-16 11 views
9

Sto cercando di implementare la decrittografia SJCL delle stringhe crittografate aes-128-ccm in Ruby. Dopo aver letto un similar question vedo che questo dovrebbe essere supportato nelle versioni più recenti della libreria OpenSSL e quindi ho installato la versione di sviluppo da github a/optDecrittografia SJCL AES-128-CCM in Ruby

Dopo averlo fatto non vedo l'aes-128-ccm cifra nella lista quando si esegue/opt/cifrari bin/openssl:

ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DH-DSS-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DH-RSA-AES256-SHA256:DH-DSS-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DH-RSA-AES256-SHA:DH-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:DH-RSA-CAMELLIA256-SHA:DH-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DH-RSA-DES-CBC3-SHA:DH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA:PSK-3DES-EDE-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:DH-DSS-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DH-RSA-AES128-SHA256:DH-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DH-RSA-AES128-SHA:DH-DSS-AES128-SHA:DHE-RSA-SEED-SHA:DHE-DSS-SEED-SHA:DH-RSA-SEED-SHA:DH-DSS-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:DH-RSA-CAMELLIA128-SHA:DH-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:SEED-SHA:CAMELLIA128-SHA:IDEA-CBC-SHA:PSK-AES128-CBC-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:PSK-RC4-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DH-RSA-DES-CBC-SHA:DH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DH-RSA-DES-CBC-SHA:EXP-DH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5 

Ma se corro/opt/bin/openssl enc -help 2> 1 & vedo "-AES-128 ccm":

-aes-128-cbc    -aes-128-ccm    -aes-128-cfb    
-aes-128-cfb1    -aes-128-cfb8    -aes-128-ctr    
-aes-128-ecb    -aes-128-gcm    -aes-128-ofb    
-aes-128-xts    -aes-192-cbc    -aes-192-ccm    
-aes-192-cfb    -aes-192-cfb1    -aes-192-cfb8    
-aes-192-ctr    -aes-192-ecb    -aes-192-gcm    
-aes-192-ofb    -aes-256-cbc    -aes-256-ccm    
-aes-256-cfb    -aes-256-cfb1    -aes-256-cfb8    
-aes-256-ctr    -aes-256-ecb    -aes-256-gcm    
-aes-256-ofb    -aes-256-xts    -aes128     
-aes192     -aes256     -bf      
-bf-cbc     -bf-cfb     -bf-ecb     
-bf-ofb     -blowfish     -camellia-128-cbc   
-camellia-128-cfb   -camellia-128-cfb1   -camellia-128-cfb8   
-camellia-128-ecb   -camellia-128-ofb   -camellia-192-cbc   
-camellia-192-cfb   -camellia-192-cfb1   -camellia-192-cfb8   
-camellia-192-ecb   -camellia-192-ofb   -camellia-256-cbc   
-camellia-256-cfb   -camellia-256-cfb1   -camellia-256-cfb8   
-camellia-256-ecb   -camellia-256-ofb   -camellia128    
-camellia192    -camellia256    -cast      
-cast-cbc     -cast5-cbc     -cast5-cfb     
-cast5-ecb     -cast5-ofb     -des      
-des-cbc     -des-cfb     -des-cfb1     
-des-cfb8     -des-ecb     -des-ede     
-des-ede-cbc    -des-ede-cfb    -des-ede-ofb    
-des-ede3     -des-ede3-cbc    -des-ede3-cfb    
-des-ede3-cfb1    -des-ede3-cfb8    -des-ede3-ofb    
-des-ofb     -des3      -desx      
-desx-cbc     -gost89     -gost89-cnt    
-id-aes128-CCM    -id-aes128-GCM    -id-aes192-CCM    
-id-aes192-GCM    -id-aes256-CCM    -id-aes256-GCM    
-idea      -idea-cbc     -idea-cfb     
-idea-ecb     -idea-ofb     -rc2      
-rc2-40-cbc    -rc2-64-cbc    -rc2-cbc     
-rc2-cfb     -rc2-ecb     -rc2-ofb     
-rc4      -rc4-40     -rc4-hmac-md5    
-seed      -seed-cbc     -seed-cfb     
-seed-ecb     -seed-ofb   

Ho reinstallato ruby ​​2.0.0p0 con rvm utilizzando la virgola nd: rvm reinstall 2.0.0 --with-openssl-dir=/opt (indicato nell'articolo sopracitato). E poi ha funzionato cipher = OpenSSL::Cipher.new('aes-128-ccm'). Che ha restituito il seguente errore:

unsupported cipher algorithm (aes-128-ccm) 

La mia domanda è come posso aggiungere il supporto per AES-128-CCM in Ruby/Che cosa sto facendo male qui?

+2

Appare nella lista ** OpenSSL :: Cipher.ciphers **? Controlla se sei veramente collegato con la libreria openssl corretta. Su Linux, ldd/path/to/ruby ​​dovrebbe elencare il collegamento di libcrypt.so –

+0

Cosa significa 'require 'openssl'; mette OpenSSL :: VERSION'? –

risposta

2

Va bene che ho fatto funzionare, ecco quello che ho fatto:

ottenere innanzitutto la fonte OpenSSL da github:

$ git clone https://github.com/openssl/openssl.git 
$ cd openssl/ 

Se si desidera che la stessa versione esatta come ho usato, fare:

$ git checkout 5ae8d6bcbaff99423a2608559d738a3fcf7ed6dc -b tmp 

Ora costruire OpenSSL con le librerie condivise in una directory:

$ ./config shared --prefix=/home/jbr/local/openssl 
$ make depend 
$ make 
$ make install 

Assicurarsi di avere ccm-support:

$ /home/jbr/local/openssl/bin/openssl enc -help 2>&1 | grep "ccm" 
-aes-128-ccm    -aes-128-cfb    -aes-128-cfb1    
-aes-192-cbc    -aes-192-ccm    -aes-192-cfb    
-aes-256-ccm    -aes-256-cfb    -aes-256-cfb1 

Okay, ora installare un nome Ruby, utilizzando rvm e la nuova versione di OpenSSL:

$ rvm install ruby-2.0.0-p195 -n ccm --with-openssl-dir=/home/jbr/local/openssl 

Questo comando ti dà una versione di patch di livello Ruby 2.0.0 195 con -ccm, che utilizza le tue nuove librerie OpenSSL.

Ora usare che la nuova versione di Ruby:

$ rvm use ruby-2.0.0-p195-ccm 

e testarlo con IRB:

$ irb 
2.0.0p195 :001 > require 'openssl' 
=> true 
2.0.0p195 :005 > OpenSSL::Cipher.ciphers.include? "aes-128-ccm" 
=> true 

Ora avete AES-128 ccm.

Problemi correlati