Skip to content

Cryptographic library

nmaya edited this page Sep 5, 2024 · 2 revisions

暗号ライブラリ

OpenSSL 3 の注意点

OpenSSL を使うには、vcxproj の include, link を変更する必要がある

https://osdn.net/projects/ttssh2/ticket/43469, https://osdn.net/ticket/download.php?group_id=1412&tid=43469&file_id=12002

OpenSSL 3 から、一部の方式が動作しない

legacy なアルゴリズムがデフォルトで無効になっているため。

r10647にて、これらが有効になるようにした。

LibreSSL の注意点

ライブラリファイル名

LibreSSL はバージョンによって異なる(上がる)ことがある。その場合は vcxproj などでリンクするライブラリファイル名を変更する。

cf. https://osdn.net/projects/ttssh2/ticket/45656#comment:1412:45656:1680130841

バージョン ファイル名
3.4.3 crypto-47.lib
3.7.2 crypto-50.lib

LibreSSL 3.5.0 - 3.7.0 の注意点

構造体が opaque になったため、ssh_aes_ctr(), ssh_des3_ctr(), ssh_bf_ctr(), ssh_cast5_ctr(), ssh_camellia_ctr() のビルドが通らない

LibreSSL 3.7.1 から EVP_CIPHER_meth_* 関数が追加されたため、OpenSSL と同じように EVP_CIPHER_meth_* 関数を使って暗号を使うことができる。

暗号ライブラリ・暗号化方式/MAC方式・使用される関数の対応

OpenSSL 3- LibreSSL -3.4.3 3.5.0-3.7.0 3.7.1-
blowfish-cbc EVP_bf_cbc() *1 ○ *6 EVP_bf_cbc() *1
cast128-cbc EVP_cast5_cbc() *1 ○ *6 EVP_cast5_cbc() *1
arcfour EVP_rc4() *1 ○ *6 EVP_rc4() *1
arcfour128 EVP_rc4() *1 ○ *6 EVP_rc4() *1
arcfour256 EVP_rc4() *1 ○ *6 EVP_rc4() *1
aes128-ctr EVP_aes_128_ctr() *1 EVP_aes_128_ctr() *1
aes192-ctr EVP_aes_192_ctr() *1 EVP_aes_192_ctr() *1
aes256-ctr EVP_aes_256_ctr() *1 EVP_aes_256_ctr() *1
3des-ctr evp_des3_ctr() *3 ○ *5 evp_des3_ctr() *2 ○ *4 × ○ *5
blowfish-ctr evp_bf_ctr() *3 ○ *5 evp_bf_ctr() *3 ○ *4 × ○ *5
cast128-ctr evp_cast5_ctr() *3 ○ *5 evp_cast5_ctr() *3 ○ *4 × ○ *5
camellia128-ctr EVP_camellia_128_ctr() *1 evp_camellia_128_ctr() *3 ○ *4 × ○ *5
camellia192-ctr EVP_camellia_192_ctr() *1 evp_camellia_128_ctr() *3 ○ *4 × ○ *5
camellia256-ctr EVP_camellia_256_ctr() *1 evp_camellia_128_ctr() *3 ○ *4 × ○ *5
3DES (RSA1鍵用) evp_ssh1_3des() *2 ○ *5 evp_ssh1_3des() *2 ○ *4 × ○ *5
OpenSSL 3- LibreSSL -3.4.3 3.5.0-3.7.0 3.7.1-
[email protected] EVP_ripemd160() *1 ○ *6 EVP_ripemd160() *1
[email protected] EVP_ripemd160() *1 ○ *6 EVP_ripemd160() *1

*1 暗号ライブラリの関数

*2 cipher-3des.c 内関数

*3 cipher-ctr.c 内関数

*4 EVP_CIPHER 構造体を用いる

*5 EVP_CIPHER_meth_new() 関数を用いる

*6 OpenSSL Legacy Provider を有効にすることで利用できる(r10647)