暗号ライブラリの比較

ウィキメディアの一覧記事 ウィキペディアから

暗号ライブラリの比較(あんごうライブラリのひかく)では、暗号化アルゴリズムを扱い、サポートする各機能を呼び出すAPIを持つ暗号ライブラリを比較する。

暗号ライブラリ

さらに見る 実装, 開発元 ...
実装開発元開発言語オープンソースソフトウェアライセンスFIPS 140 検証[1]FIPS 140-2 モード最新アップデート
Bouncy CastleLegion of the Bouncy Castle Inc.Java, C#YesMIT LicenseYesYes
CryptoComplySafeLogicJava, CNo商用版YesYesContinuous
cryptlibPeter GutmannCYesSleepycat License または 商用版No[注釈 1]Yes
Crypto++The Crypto++ projectC++YesBoost Software License (すべての各ファイルは public domain)NoNoApril 8, 2018 (7.0.0)
Moved to FIPS 140 Historical Validation List[注釈 2]
GnuTLSNikos Mavrogiannopoulos, Simon JosefssonCYesGNU LGPL v2.1+YesYes3.8.9 - 2025年2月7日 (2か月前) (2025-02-07)[2] [±]
LibgcryptGnuPG community and g10codeCYesGNU LGPL v2.1+YesYes
libsodiumFrank DenisCYesISC licenseNoNoDecember 13, 2017 (1.0.16)
NaClDaniel J. Bernstein, Tanja Lange, Peter SchwabeCYesPublic domainNoNoFebruary 21, 2011[3]
Network Security ServicesMozillaCYesMPL 2.0Yes[4]Yes3.109 - 2024年2月28日 (13か月前) (2024-02-28)[5] [±]

3.101.3 (ESR) - 2025年1月23日 (2か月前) (2025-01-23)[5] [±]

OpenSSLThe OpenSSL ProjectCYesApache Licence 1.0 と 4-Clause BSD LicenceYesYes3.5.0 - 2025年4月8日 (15日前) (2025-04-08)[6] [±]
wolfCryptwolfSSL, Inc.CYesGPL v2 または 商用版YesYes5.7.6 - 2024年12月31日 (3か月前) (2024-12-31)[7] [±]
閉じる
  1. 実際のcryptlibはFIPS 140検証されていないが、第三者の独自の商用製品の一部として使われたcryptlibが検証されている。
  2. Crypto ++は2003年から2008年の3回のFIPS 140検証を受けた。2016年にNISTはCrypto ++をHistorical Validation Listに移行。このによりFIPS検証が取り消され、連邦政府機関は検証された暗号としてはこのモジュールを使用することができなくなっている。

鍵処理

要約
視点

鍵処理には鍵生成アルゴリズム、鍵交換合意、公開鍵暗号標準が含まれる。

鍵生成と鍵交換

さらに見る 実装, ECDH ...
実装 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
閉じる
  1. 下位レベルのインターフェイス使用による。

楕円曲線暗号サポート

さらに見る 実装, NIST ...
実装 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#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
閉じる
  1. ライブラリは、デフォルトでPEMなしでX.509およびPKCS#8エンコーディングを提供。公開鍵と秘密鍵のPEMエンコーディングでは、PEM Packが必要。
  2. Public Key Cryptographic Standards(PKCS)は、実際のlibgcryptライブラリではないが、GnuPGフレームワークの一部でもある付随するライブラリとツールでサポートされている。

ハッシュ関数

サポートされている暗号化ハッシュ関数を比較する。メッセージのMACタグを生成するために使用される暗号を含む。ここではハッシュ関数は、任意の長さのメッセージから、元のメッセージの復号が実質不可能な固定サイズの出力を生成するものとして定義する。

さらに見る 実装, MD5 ...
実装 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-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 ...
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
閉じる
  1. Crypto ++は、1990年代からGOSTの64ビット版を提供。2015年からGOSTの128ビット版は提供していない。
  2. libsodiumはAES-256のみを提供。AES-128、AES-192は提供していない。

暗号モード

さらに見る 実装, ECB ...
実装 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 ...
実装 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
閉じる

ハードウェアによるサポート

要約
視点

ハードウェア暗号の使用可否を比較する。特定のハードウェアを利用できる場合、ライブラリは高速化、および/またはセキュリティを向上させることができる。

Smartcard, SIMHSM プロトコルサポート

さらに見る 実装, PKCS #11 ...
実装 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
閉じる
  1. PKCS#11プロバイダ、または基本操作へのアクセスを提供するオペレータインターフェイスの実装を使用。

汎用 CPU / プラットフォームアクセラレーションサポート

さらに見る 実装, AES-NI ...
実装 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]
閉じる
  1. AltiVecには、POWER4からPOWER8までのSIMD処理が含まれる。POWER8は、SSEやARMv8.1に似たAESアクセラレータ、SHA、PMULを提供するメモリー内暗号化を追加。
  2. Crypto ++は、Padlock乱数ジェネレータへのアクセスを提供。 AESアクセラレータのような他の機能は提供されていない。
  3. OpenSSL RDRANDのサポートは、ENGINEインターフェースを介して提供される。 RDRANDジェネレータはデフォルトでは使用されていない。

マイクロコントローラ 暗号化アクセラレータサポート

さらに見る 実装, STM32F2 ...
閉じる

コードサイズとコードコメント比率

さらに見る 実装, ソースコードサイズ (kSLOC = 1000行のソースコード) ...
実装 ソースコードサイズ

(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 ...
実装 サポート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
閉じる
  1. Crypto ++はオブジェクトレベルでスレッドセーフである。インスタンス間で共有データはない。2つの異なるスレッドが同じオブジェクトにアクセスする場合、ロックはユーザーが行う必要がある。

参考文献

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.