暗号ライブラリの比較(あんごうライブラリのひかく)では、暗号化アルゴリズムを扱い、サポートする各機能を呼び出すAPIを持つ暗号ライブラリを比較する。
暗号ライブラリ
- ^ 実際のcryptlibはFIPS 140検証されていないが、第三者の独自の商用製品の一部として使われたcryptlibが検証されている。
- ^ Crypto ++は2003年から2008年の3回のFIPS 140検証を受けた。2016年にNISTはCrypto ++をHistorical Validation Listに移行。このによりFIPS検証が取り消され、連邦政府機関は検証された暗号としてはこのモジュールを使用することができなくなっている。
鍵処理
鍵処理には鍵生成アルゴリズム、鍵交換合意、公開鍵暗号標準が含まれる。
鍵生成と鍵交換
公開鍵暗号標準
- ^ ライブラリは、デフォルトでPEMなしでX.509およびPKCS#8エンコーディングを提供。公開鍵と秘密鍵のPEMエンコーディングでは、PEM Packが必要。
- ^ a b c d e Public Key Cryptographic Standards(PKCS)は、実際のlibgcryptライブラリではないが、GnuPGフレームワークの一部でもある付随するライブラリとツールでサポートされている。
ハッシュ関数
サポートされている暗号化ハッシュ関数を比較する。メッセージのMACタグを生成するために使用される暗号を含む。ここではハッシュ関数は、任意の長さのメッセージから、元のメッセージの復号が実質不可能な固定サイズの出力を生成するものとして定義する。
MACアルゴリズム
メッセージ認証コード(MAC)アルゴリズムの実装を比較する。MACは、メッセージを認証するために使用される短い情報である。メッセージが指定された送信者から送信されたもので(真正性)、送信中に変更されていない(完全性)ことを確認するために用いられる。
ブロック暗号
ブロック暗号の実装を比較する。ブロック暗号は、決定論的であり、対称鍵を用いて設定された数のビット(ブロックと呼ばれる)上で動作するものとして定義される。 各ブロック暗号は、実行可能な鍵サイズとブロック暗号モードに分割することができる。
- ^ Crypto ++は、1990年代からGOSTの64ビット版を提供。2015年からGOSTの128ビット版は提供していない。
- ^ libsodiumはAES-256のみを提供。AES-128、AES-192は提供していない。
ストリーム暗号
ストリーム暗号の実装を比較する。ストリーム暗号は、擬似乱数暗号の文字列と結合した平文文字列を使用する。ストリーム暗号は通常、ブロック暗号より高速でハードウェアの複雑さは減るが、攻撃の影響を受けやすくなる。
ハードウェアによるサポート
ハードウェア暗号の使用可否を比較する。特定のハードウェアを利用できる場合、ライブラリは高速化、および/またはセキュリティを向上させることができる。
- ^ PKCS#11プロバイダ、または基本操作へのアクセスを提供するオペレータインターフェイスの実装を使用。
汎用 CPU / プラットフォームアクセラレーションサポート
- ^ AltiVecには、POWER4からPOWER8までのSIMD処理が含まれる。POWER8は、SSEやARMv8.1に似たAESアクセラレータ、SHA、PMULを提供するメモリー内暗号化を追加。
- ^ Crypto ++は、Padlock乱数ジェネレータへのアクセスを提供。 AESアクセラレータのような他の機能は提供されていない。
- ^ OpenSSL RDRANDのサポートは、ENGINEインターフェースを介して提供される。 RDRANDジェネレータはデフォルトでは使用されていない。
コードサイズとコードコメント比率
移植性
実装
|
サポート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 3.8.9” (2025年2月8日). 2025年3月4日閲覧。
- ^ 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” (2024年2月28日). 2025年3月15日閲覧。
- ^ “OpenSSL: Releases openssl/openssl”. 2025年4月23日閲覧。
- ^ “wolfSSL ChangeLog”. 2025年2月7日閲覧。
- ^ 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
外部リンク
|