-
Notifications
You must be signed in to change notification settings - Fork 0
MS_BouncyCastle
nishi_74322014 edited this page Aug 4, 2026
·
1 revision
- 戻る(証明書、.NETの署名・暗号化アルゴリズム)
- BouncyCastle
- OpenSSL
- Java と C# に各種の暗号化の機能を提供している。
- API も Java と C# で、ほぼ同じなので、
検索して発見した Java のサンプルを C# に焼き直せる。
- .NET では PCL で使える。
- 最近では .NET Standard(
MS_DotNetStandard.md)もサポートしている。 - 故に、.NET Core(
MS_DotNetCore.md)での利用も可能。
-
X509Certificate、X509Certificate2の代替として利用可能。 - 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/Pkcs12Info(System.Security.Cryptography.Pkcs)CMS / PKCS#7 SignedCms/EnvelopedCms(System.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
|
| 鍵ペアの生成 |
RsaKeyPairGenerator、ECKeyPairGenerator
|
| 証明書の生成 | 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の署名・暗号化アルゴリズム を含めた原則である。
- 証明書
- .NETの署名・暗号化アルゴリズム
- 暗号化アルゴリズム
- OpenSSL
- bouncycastle.org
- Bouncy Castle (cryptography) - Wikipedia
- NuGet - BouncyCastle.Cryptography
- BouncyCastle(C#)でX509自己証明書を作成する - Qiita
Tags: セキュリティ, 暗号化, 証明書, .NET Core, .NET Standard
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。