2013-04-16 2 views
9

Ruby에서 aes-128-ccm 암호화 문자열의 SJCL 암호 해독을 구현하려고합니다. similar question을 읽은 후 이것이 OpenSSL 라이브러리의 최신 버전에서 지원되어야한다는 것을 알기 때문에 github에서/opt로 개발 버전을 설치했습니다.Ruby에서 SJCL AES-128-CCM 암호 해독

이렇게하면 AES-128-ccm이 표시되지 않습니다. 목록에서 암호 I 실행/옵션/빈 /하려면 openssl 암호 : 나는/옵션/빈 /하려면 openssl ENC의 -help를 실행한다면 2> & 1 나는 "-AES-128-CCM"을 참조하십시오

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 

:

-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   

쉼표로 rvm을 사용하여 2.0.0p0을 다시 설치했습니다. nd : rvm reinstall 2.0.0 --with-openssl-dir=/opt (전술 한 논문에서 주어진다). 그런 다음 cipher = OpenSSL::Cipher.new('aes-128-ccm')을 실행했습니다. 어느 다음과 같은 오류를 반환

unsupported cipher algorithm (aes-128-ccm) 

내 질문은 내가 잘못 여기서 뭐하는 거지 내가/루비 AES-128-CCM에 대한 지원을 추가 할 수있는 방법인가?

먼저 github에서에서 OpenSSL 소스를 얻을 : 내가 여기에 내가 무슨 짓을했는지, 그것은 일을했습니다

+2

** OpenSSL :: Cipher.ciphers ** 목록에 표시됩니까? 실제로 올바른 openssl 라이브러리와 링크되어 있는지 확인하십시오. 리눅스에서, ldd/path/to/ruby는 libcrypt.so 링키지를 나열해야합니다. –

+0

'requires openssl '; OpenSSL :: VERSION'을 줘? –

답변

2

좋아

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

내가 사용했던대로 동일한 버전을 원하는 경우

,

: 이제 일부 디렉토리에 공유 라이브러리와 OpenSSL을 구축

$ git checkout 5ae8d6bcbaff99423a2608559d738a3fcf7ed6dc -b tmp 

를 : 않습니다

는 CCM 지원이 있는지 확인 :

$ /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 

자, 이제 RVM 및 OpenSSL이 새 버전의 사용, 명명 된 루비를 설치

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

이 명령은 당신에게 버전을 제공을 새로운 OpenSSL 라이브러리를 사용하는 -ccm이 추가 된 Ruby 2.0.0 패치 레벨 195.

$ rvm use ruby-2.0.0-p195-ccm 

그리고 IRB와 함께 테스트 :

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

이제 AES-128-CCM이

지금 루비의 새 버전이 것을 사용합니다.