暗号ライブラリの比較
表示
暗号ライブラリの比較(あんごうライブラリのひかく)では、暗号化アルゴリズムを扱い、サポートする各機能を呼び出すAPIを持つ暗号ライブラリを比較する。
暗号ライブラリ
[編集]実装 | 開発元 | 開発言語 | オープンソース | ソフトウェアライセンス | FIPS 140 検証[1] | FIPS 140-2 モード | 最新アップデート |
---|---|---|---|---|---|---|---|
Bouncy Castle | Legion of the Bouncy Castle Inc. | Java, C# | Yes | MIT License | Yes | Yes | |
CryptoComply | SafeLogic | Java, C | No | 商用版 | Yes | Yes | Continuous |
cryptlib | Peter Gutmann | C | Yes | Sleepycat License または 商用版 | No[注釈 1] | Yes | |
Crypto++ | The Crypto++ project | C++ | Yes | Boost Software License (すべての各ファイルは public domain) | No | No | April 8, 2018 (7.0.0) Moved to FIPS 140 Historical Validation List[注釈 2] |
GnuTLS | Nikos Mavrogiannopoulos, Simon Josefsson | C | Yes | GNU LGPL v2.1+ | Yes | Yes | 3.8.4 - 2024年3月20日[2] [±] |
Libgcrypt | GnuPG community and g10code | C | Yes | GNU LGPL v2.1+ | Yes | Yes | |
libsodium | Frank Denis | C | Yes | ISC license | No | No | December 13, 2017 (1.0.16) |
NaCl | Daniel J. Bernstein, Tanja Lange, Peter Schwabe | C | Yes | Public domain | No | No | February 21, 2011[3] |
Network Security Services | Mozilla | C | Yes | MPL 2.0 | Yes[4] | Yes | 3.65 - 2021年5月13日[5] [±] |
OpenSSL | The OpenSSL Project | C | Yes | Apache Licence 1.0 と 4-Clause BSD Licence | Yes | Yes | 3.4.0 - 2024年10月22日[6] [±] |
wolfCrypt | wolfSSL, Inc. | C | Yes | GPL v2 または 商用版 | Yes | Yes | 5.5.0 - 2022年8月30日[7] [±] |
鍵処理
[編集]鍵処理には鍵生成アルゴリズム、鍵交換合意、公開鍵暗号標準が含まれる。
鍵生成と鍵交換
[編集]実装 | ECDH | DH | DSA | RSA | ElGamal | NTRU | DSS |
---|---|---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
CryptoComply | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
cryptlib | Yes | Yes | Yes | Yes | Yes | No | Yes |
Crypto++ | Yes | Yes | Yes | Yes | Yes | No | Yes |
Libgcrypt | Yes[注釈 1] | Yes | Yes | Yes | Yes | No | Yes |
libsodium | No | Yes | Yes | No | No | No | |
OpenSSL | Yes | Yes | Yes | Yes | No | No | No |
wolfCrypt | Yes | Yes | Yes | Yes | No | Yes | Yes |
- ^ 下位レベルのインターフェイス使用による。
実装 | NIST | SECG | ECC Brainpool | ECDSA | ECDH | Curve25519 | EdDSA | GOST R 34.10 |
---|---|---|---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
CryptoComply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
cryptlib | Yes | Yes | Yes | Yes | Yes | |||
Crypto++ | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
Libgcrypt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
libsodium | Yes | Yes | Yes | |||||
OpenSSL | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
wolfCrypt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
公開鍵暗号標準
[編集]実装 | PKCS#1 | PKCS#5 | PKCS#8 | PKCS#12 | IEEE P1363 | ASN.1 |
---|---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | Yes | Yes | Yes | Yes |
CryptoComply | Yes | Yes | Yes | Yes | Yes | Yes |
cryptlib | Yes | Yes | Yes | Yes | No | Yes |
Crypto++ | Yes | Yes | Yes[注釈 1] | No | Yes | Yes |
Libgcrypt | Yes | Yes[注釈 2] | Yes[注釈 2] | Yes[注釈 2] | Yes[注釈 2] | Yes[注釈 2] |
libsodium | No | No | No | No | No | No |
OpenSSL | Yes | Yes | Yes | Yes | No | Yes |
wolfCrypt | Yes | Yes | Yes | Yes | No | Yes |
ハッシュ関数
[編集]サポートされている暗号化ハッシュ関数を比較する。メッセージのMACタグを生成するために使用される暗号を含む。ここではハッシュ関数は、任意の長さのメッセージから、元のメッセージの復号が実質不可能な固定サイズの出力を生成するものとして定義する。
実装 | MD5 | SHA-1 | SHA-2 | SHA-3 | RIPEMD-160 | Tiger | Whirlpool | GOST | Stribog | BLAKE2 |
---|---|---|---|---|---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
CryptoComply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
cryptlib | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
Crypto++ | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes |
Libgcrypt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
libsodium | No | No | Yes | No | No | No | No | No | No | Yes |
OpenSSL | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
wolfCrypt | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes |
MACアルゴリズム
[編集]メッセージ認証コード(MAC)アルゴリズムの実装を比較する。MACは、メッセージを認証するために使用される短い情報である。メッセージが指定された送信者から送信されたもので(真正性)、送信中に変更されていない(完全性)ことを確認するために用いられる。
実装 | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA2 | Poly1305-AES | BLAKE2-MAC |
---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | Yes | Yes | Yes |
CryptoComply | Yes | Yes | Yes | Yes | Yes |
cryptlib | Yes | Yes | Yes | No | No |
Crypto++ | Yes | Yes | Yes | Yes | Yes |
Libgcrypt | Yes | Yes | Yes | Yes | Yes |
libsodium | No | No | Yes | Yes | Yes |
OpenSSL | Yes | Yes | Yes | Yes | Yes |
wolfCrypt | Yes | Yes | Yes | Yes | Yes |
ブロック暗号
[編集]ブロック暗号の実装を比較する。ブロック暗号は、決定論的であり、対称鍵を用いて設定された数のビット(ブロックと呼ばれる)上で動作するものとして定義される。 各ブロック暗号は、実行可能な鍵サイズとブロック暗号モードに分割することができる。
Implementation | AES | Camellia | 3DES | Blowfish | Twofish | CAST5 | IDEA | GOST 28147-89 | ARIA |
---|---|---|---|---|---|---|---|---|---|
Bouncy Castle[8] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
CryptoComply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
cryptlib[9] | Yes | No | Yes | Yes | Yes | Yes | |||
Crypto++ | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes[注釈 1] | Yes |
Libgcrypt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
libsodium | Yes[注釈 2] | No | No | No | |||||
OpenSSL | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
wolfCrypt | Yes | Yes | Yes | No | Yes |
実装 | ECB | CBC | OFB | CFB | CTR | CCM | GCM | OCB | XTS | AES-Wrap | Stream |
---|---|---|---|---|---|---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
CryptoComply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
cryptlib | Yes | Yes | Yes | Yes | No | Yes | |||||
Crypto++ | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes |
Libgcrypt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
libsodium | No | No | Yes | No | Yes | ||||||
OpenSSL | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
wolfCrypt | Yes | Yes | No | Yes | Yes | Yes | Yes | No | Yes | No | No |
ストリーム暗号
[編集]ストリーム暗号の実装を比較する。ストリーム暗号は、擬似乱数暗号の文字列と結合した平文文字列を使用する。ストリーム暗号は通常、ブロック暗号より高速でハードウェアの複雑さは減るが、攻撃の影響を受けやすくなる。
実装 | RC4 | HC-256 | Rabbit | Salsa20 | ChaCha | SEAL | Panama | WAKE | Grain | VMPC | ISAAC |
---|---|---|---|---|---|---|---|---|---|---|---|
Bouncy Castle | Yes | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes |
CryptoComply | Yes | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes |
cryptlib | Yes | No | No | No | No | No | No | No | No | No | No |
Crypto++ | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No |
Libgcrypt | Yes | No | No | Yes | Yes | No | No | No | No | No | No |
libsodium | No | No | No | Yes | Yes | No | No | No | No | No | No |
OpenSSL | Yes | No | No | No | Yes | No | No | No | No | No | No |
wolfCrypt | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No |
ハードウェアによるサポート
[編集]ハードウェア暗号の使用可否を比較する。特定のハードウェアを利用できる場合、ライブラリは高速化、および/またはセキュリティを向上させることができる。
実装 | PKCS #11 | PC/SC | CCID |
---|---|---|---|
Bouncy Castle | Yes [注釈 1] | ||
CryptoComply | Yes | ||
cryptlib | Yes | ||
Crypto++ | No | ||
Libgcrypt | Yes [10] | Yes [11] | Yes [11] |
libsodium | No | ||
OpenSSL | |||
wolfCrypt | Yes |
- ^ PKCS#11プロバイダ、または基本操作へのアクセスを提供するオペレータインターフェイスの実装を使用。
実装 | AES-NI | SSSE3 / SSE4.1 | AVX / AVX2 | RdRand | VIA PadLock | Intel QuickAssist | AltiVec[注釈 1] | ARMv7-A NEON | ARMv8-A |
---|---|---|---|---|---|---|---|---|---|
CryptoComply | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |
cryptlib | Yes | Yes | Yes | Yes | Yes | No | No | ||
Crypto++ | Yes | Yes | Yes | Yes | Yes[注釈 2] | No | Yes | Yes | Yes |
Libgcrypt[12] | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes |
libsodium | Yes | Yes | Yes | No | No | No | |||
OpenSSL | Yes | Yes | Yes | Yes[注釈 3] | Yes | No | Yes | Yes | Yes |
wolfCrypt | Yes | Yes | Yes | No | Yes[13] | Yes[14] |
マイクロコントローラ 暗号化アクセラレータサポート
[編集]実装 | STM32F2 | STM32F4 | Cavium NITROX | Freescale CAU/mmCAU | Microchip PIC32MZ | Atmel ATECC508A | TI TivaC Series | CubeMX | Nordic nRF51 |
---|---|---|---|---|---|---|---|---|---|
wolfCrypt | Yes | Yes | Yes | Yes | Yes | Yes[15] | Yes[16] | Yes | Yes |
コードサイズとコードコメント比率
[編集]実装 | ソースコードサイズ (kSLOC = 1000行のソースコード) |
コメント行に対するコードの割合 |
---|---|---|
Bouncy Castle | 1359[17] | 5.26[17] |
cryptlib | 241 | 2.66 |
Crypto++ | 115[18] | 5.74[18] |
Libgcrypt | 216[19] | 6.27[19] |
libsodium | 44[20] | 21.92[20] |
OpenSSL | 472[21] | 4.41[21] |
wolfCrypt | 39 | 5.69 |
移植性
[編集]実装 | サポートOS | スレッドセーフ |
---|---|---|
Bouncy Castle | General Java API: J2ME, Java Runtime Environment 1.1+, Android. Java FIPS API: Java Runtime 1.5+, Android. C# API (General & FIPS): CLR 4. | |
CryptoComply | Linux (RHEL, CentOS, Debian, Ubuntu, etc.), Windows, iOS, Android, FreeBSD, macOS, Solaris, Java Runtime Environment | Yes |
cryptlib | AMX, ARINC 653, BeOS, ChorusOS, CMSIS-RTOS/mbed-rtos, DOS, DOS32, eCOS, embOS, FreeRTOS/OpenRTOS, uItron, MQX, MVS, Nucleus, OS/2, Palm OS, QNX Neutrino, RTEMS, SMX, Tandem NonStop, Telit, ThreadX, uC/OS II, Unix (AIX, FreeBSD, HP-UX, Linux, macOS, Solaris, etc.), VDK, VM/CMS, VxWorks, Win16, Win32, Win64, WinCE/Pocket PC/etc, XMK | Yes |
Crypto++ | Unix (AIX, OpenBSD, Linux, MacOS, Solaris, etc.), Win32, Win64, Android, iOS, ARM | Yes[注釈 1] |
Libgcrypt | All 32 and 64 bit Unix Systems (GNU/Linux, FreeBSD, NetBSD, macOS etc.), Win32, Win64, WinCE 他 | Yes[22] |
libsodium | macOS, Linux, OpenBSD, NetBSD, FreeBSD, DragonflyBSD, Android, iOS, 32 and 64-bit Windows (Visual Studio, MinGW, C++ Builder), NativeClient, QNX, JavaScript, AIX, MINIX, Solaris | Yes |
OpenSSL | Solaris, IRIX, HP-UX, MPE/iX, Tru64, Linux, Android, BSD (OpenBSD, NetBSD, FreeBSD, DragonflyBSD), NextSTEP, QNX, UnixWare, SCO, AIX, 32 and 64-bit Windows (Visual Studio, MinGW, UWIN, CygWin), UEFI, macOS (Darwin), iOS, HURD, VxWorks, uClinux, VMS, DJGPP (DOS), Haiku | Yes |
wolfCrypt | Win32/64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, WinCE, Haiku, OpenWRT, iPhone (iOS), Android, Nintendo Wii and Gamecube through DevKitPro, QNX, MontaVista, NonStop, TRON/ITRON/µITRON, Micrium's µC/OS, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, HP-UX, 非OS | Yes |
- ^ Crypto ++はオブジェクトレベルでスレッドセーフである。インスタンス間で共有データはない。2つの異なるスレッドが同じオブジェクトにアクセスする場合、ロックはユーザーが行う必要がある。
参考文献
[編集]- ^ Validated FIPS 140 Cryptographic Modules, NIST.gov, retrieved 2015-12-22
- ^ “GnuTLS help mailing list” (2024年3月20日). 2024年6月17日閲覧。
- ^ Downloading and installing NaCl, Bernstein, Lange, Schwabe, retrieved 2017-05-22
- ^ “FIPS”. Mozilla Foundation (2012年2月1日). 2013年5月2日時点のオリジナルよりアーカイブ。2013年5月17日閲覧。
- ^ a b “Release notes for recent versions of NSS” (2021年5月13日). 2021年7月18日閲覧。
- ^ “OpenSSL: Newslog”. 2024年10月24日閲覧。
- ^ “wolfSSL ChangeLog”. 2022年9月5日閲覧。
- ^ Bouncy Castle Specifications, bouncycastle.org, retrieved 2018-04-10
- ^ cryptlib Encryption Toolkit, Peter Gutmann, retrieved 2015-11-28
- ^ With Scute, scute.org
- ^ a b With GnuPG's SCdaemon & gpg-agent, gnupg.org
- ^ hwfeatures.c, git.gnupg.org
- ^ https://www.wolfssl.com/wolfSSL/Blog/Entries/2017/1/18_wolfSSL_Asynchronous_Intel_QuickAssist_Support.html
- ^ https://www.wolfssl.com/wolfSSL/Blog/Entries/2016/10/13_wolfSSL_ARMv8_Support.html
- ^ https://www.wolfssl.com/wolfSSL/wolfssl-atmel.html
- ^ http://processors.wiki.ti.com/index.php/Using_wolfSSL_with_TI-RTOS
- ^ a b Language Analysis of Bouncy Castle, OpenHub.net, retrieved 2015-12-23
- ^ a b Language Analysis of Crypto++, OpenHub.net, retrieved 2018-07-18
- ^ a b Language Analysis of Libgcrypt, OpenHub.net, retrieved 2015-12-23
- ^ a b Language Analysis of libsodium, OpenHub.net, retrieved 2017-05-07
- ^ a b Language Analysis of OpenSSL, OpenHub.net, retrieved 2017-05-07
- ^ GnuPG documentation: Libgcrypt overview - thread safety, GnuPG.org, retrieved 2016-04-16
外部リンク
[編集]- Crypto++ project, https://cryptopp.com/
- OpenSSL libraries libssl and libcrypto, https://wiki.openssl.org/index.php/Libcrypto_API
- SafeLogic's CryptoComply family of cryptographic libraries, https://www.SafeLogic.com
- wolfSSL embedded crypto libraries, https://wolfssl.com/wolfSSL/Products-wolfcrypt.html