Skip to content

MS_BouncyCastle

nishi_74322014 edited this page Aug 4, 2026 · 1 revision

BouncyCastle

概要

サポートする言語

  • Java と C# に各種の暗号化の機能を提供している。
  • API も Java と C# で、ほぼ同じなので、
    検索して発見した Java のサンプルを C# に焼き直せる。

サポートするランタイム

  • .NET では PCL で使える。
  • 最近では .NET Standard(MS_DotNetStandard.md)もサポートしている。
  • 故に、.NET Core(MS_DotNetCore.md)での利用も可能。

ユースケース

  • X509CertificateX509Certificate2 の代替として利用可能。
  • C# での証明書(特に PEM)操作には、
    BouncyCastle を使用しているケースが多い。
  • .NET Core でドロップされた暗号化ライブラリを、
    互換維持のため .NET Core に実装するのに利用できる。

補足(最新化): 「PEM を読むために BouncyCastle」という 最大のユースケースは、.NET 5 以降で解消した。

やりたいこと 現在の標準 API
PEM の読み込み PemEncoding(.NET 5〜)、RSA.ImportFromPem()(.NET 5〜)
暗号化 PEM 秘密鍵 ImportFromEncryptedPem()(.NET 5〜)
自己署名証明書の作成 CertificateRequest(.NET Core 2.0〜)
PKCS#12 の読み書き X509Certificate2 / Pkcs12InfoSystem.Security.Cryptography.Pkcs
CMS / PKCS#7 SignedCms / EnvelopedCmsSystem.Security.Cryptography.Pkcs

したがって新規開発で BouncyCastle を入れる理由は減っている。 それでも必要になるのは、次のような場合である。

  • 標準 API に無いアルゴリズム(Ed25519 の一部用途、SM2/SM3、bcrypt 等)
  • OpenSSL 互換の細かい形式操作
  • Java 側と実装を揃えたい場合

補足(パッケージの選択): NuGet のパッケージ名が紛らわしい。

  • BouncyCastle(旧・無印)と BouncyCastle.NetCore(有志のフォーク)は いずれも古く、メンテナンスされていない
  • 現在の公式パッケージは BouncyCastle.Cryptography である。

古い記事に従って BouncyCastle を入れると、 脆弱性修正が反映されていない版を掴むことになるので注意すること。

詳細

BouncyCastle は「軽量 API」と「JCE/JCA 互換 API」の 2 層構成で、
C# 版では前者(Org.BouncyCastle.Crypto.*)が中心になる。

代表的な用途は次のとおり。

用途 主なクラス
PEM の読み書き PemReader / PemWriter
鍵ペアの生成 RsaKeyPairGeneratorECKeyPairGenerator
証明書の生成 X509V3CertificateGenerator
PKCS#12(キーストア) Pkcs12Store
CMS(PKCS#7) CmsSignedDataGenerator
Key Wrap(RFC 3394) AesWrapEngine

補足(セキュリティ): BouncyCastle は低レベル API を素で提供するため、 使い方を誤ると簡単に安全でない実装になる

  • パディングやモードを自分で選ぶ必要がある (AES-CBC + 手製の MAC より、AES-GCM を選ぶ)
  • IV / nonce の生成と再利用の管理が利用者側の責任になる

「標準 API で足りるなら標準 API を使う」のが、 .NETの署名・暗号化アルゴリズム を含めた原則である。

参考


Tags: セキュリティ, 暗号化, 証明書, .NET Core, .NET Standard

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally