暗号ライブラリの比較(あんごうライブラリのひかく)では、暗号化アルゴリズムを扱い、サポートする各機能を呼び出す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は、メッセージを認証するために使用される短い情報である。メッセージが指定された送信者から送信されたもので(真正性)、送信中に変更されていない(完全性)ことを確認するために用いられる。
実装 | 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 |
実装 | 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 |