「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
Open棟梁で提供される、暗号・復号化 部品。
ポリシー †
- Managed優先(.NET Standard対応を考慮)
- Managedが無ければCSPを使用というポリシーで実装。
- 必要に応じて、下記のCNG対応を行う(CNGサポートを追加)。
※ CSP = Crypto Service Provider
※ Cng = Crypto Next Genaration
CNG対応 †
方針 †
- CNGでしか提供されないアルゴリズムは、CNGで実装する。
- 必要に応じて、CNGサポートを追加(後方互換維持のため、置き換えはしない)。
調査結果 †
- Managedが無く、CSPとCNGがサポートされるプロバイダは以下。
- MD5
- SHA1
- TripleDES
- RSA
- DSA
- CNGでしか提供されないアルゴリズム。
- ECDsaCng?
- ECDiffieHellmanCng?
- なお、調査を進めてみたトコロ、
.NET Standard 2.0でも以下のようなクラスの存在を確認。
予想外に、CSPもCNGラッパーも確認できる
(CNGはLinux上ではどうなる?→ OpenSSLプロバイダが追加されつつある)。
暗号ハッシュ †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs
通常のハッシュを取得
対応プロバイダ(アルゴリズム) †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHashAlgorithm.cs
CSP (CryptoServiceProvider?) †
- MD5_CSP
- SHA1_CSP
- SHA256_CSP
- SHA384_CSP
- SHA512_CSP
CNG (CryptographyNextGeneration?) †
- MD5_CNG
- SHA1_CNG
- SHA256_CNG
- SHA384_CNG
- SHA512_CNG
Managed †
- RIPEMD160_M
- SHA1_M
- SHA256_M
- SHA384_M
- SHA512_M
メソッド †
ハッシュ取得(バイト) †
GetHashBytes?メソッド
ハッシュ取得(文字列) †
GetHashString?メソッド
キー付きハッシュ †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetKeyedHash.cs
キーを使用してハッシュを取得
対応プロバイダ(アルゴリズム) †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumKeyedHashAlgorithm.cs
CSP †
- HMACMD5
- HMACSHA1
- HMACSHA256
- HMACSHA384
- HMACSHA512
Managed †
- HMACRIPEMD160,
- MACTripleDES,
メソッド †
ハッシュ取得(バイト) †
GetHashBytes?メソッド
ハッシュ取得(文字列) †
GetHashString?メソッド
秘密鍵暗号方式 †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/SymmetricCryptography.cs
対称アルゴリズムによる暗号化・復号化
アルゴリズム †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumSymmetricAlgorithm.cs
対応プロバイダ †
- CSP (CryptoServiceProvider?)
- AES_CSP
- DES_CSP
- RC2_CSP
- TDES_CSP
- CNG (CryptographyNextGeneration?)
CipherMode?, PaddingMode?指定 †
- PaddingMode?
- None
- Zeros
- ANSIX923
- ISO10126
- PKCS7
メソッド †
暗号化 †
- EncryptString?メソッド
- EncryptBytes?メソッド
復号化 †
- DecryptString?メソッド
- DecryptBytes?メソッド
公開鍵暗号方式 †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/ASymmetricCryptography.cs
非対称アルゴリズムによる暗号化・復号化
アルゴリズム †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumASymmetricAlgorithm.cs
対応プロバイダ †
PaddingMode?指定 †
padding指定可能
メソッド †
秘密鍵と公開鍵を取得 †
暗号化 †
- EncryptString?メソッド
- EncryptBytes?メソッド
復号化 †
- DecryptString?メソッド
- DecryptBytes?メソッド
ハイブリッド・暗号化(キー交換) †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/KeyExg/BaseKeyExchange.cs
アルゴリズム †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/KeyExg/EnumKeyExchange.cs
- RSAPKCS1KeyExchange?
- RSAOAEPKeyExchange?
- ECDiffieHellmanCryptographyNextGeneration?,
RSA †
- 基底
RsaKeyExchange?
- RsaAlice? : RsaKeyExchange?
- RsaBob? : RsaKeyExchange?
- RsaOaep?
- RsaOaepAlice? : RsaAlice?
- RsaOaepBob? : RsaBob?
- RsaPkcs1
- RsaPkcs1Alice : RsaAlice?
- RsaPkcs1Bob : RsaBob?
ECDH †
- 基底
EcdhKeyExchange? : BaseKeyExchange?
- EcdhCng?
- EcdhCngAlice? : EcdhKeyExchange?
- EcdhCngBob? : EcdhKeyExchange?
- AesCryptoServiceProvider?
メソッド †
暗号化 †
復号化 †
署名・検証 †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/DigitalSign.cs
RSA/DSA †
クラス †
- DigitalSignX509.cs
- DigitalSignXML.cs
- DigitalSignParam?.cs
アルゴリズム †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumDigitalSignAlgorithm.cs
- On Windows
- RsaCSP_MD5
- RsaCSP_SHA1
- RsaCSP_SHA256
- RsaCSP_SHA384
- RsaCSP_SHA512
- DsaCSP_SHA1(SHA256以降はエラーになるため、現状サポートなし。)
- On Linux
- RsaOpenSsl_MD5
- RsaOpenSsl_SHA1
- RsaOpenSsl_SHA256
- RsaOpenSsl_SHA384
- RsaOpenSsl_SHA512
- DsaOpenSsl_SHA1
ECDsa †
クラス †
- DigitalSignECDsaCng?.cs
- DigitalSignECDsaOpenSsl?.cs
- DigitalSignECDsaX509.cs
アルゴリズム †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumDigitalSignAlgorithm.cs
- On Windows
- ECDsaCng_P256
- ECDsaCng_P384
- ECDsaCng_P521
- On Linux
- ECDsaOpenSsl_P256
- ECDsaOpenSsl_P384
- ECDsaOpenSsl_P521
メソッド †
署名 †
Signメソッド
検証 †
Verifyメソッド
パスワード関連 †
乱数生成 †
対応プロバイダ †
RNGCryptoServiceProvider?
メソッド †
- RandomByte?
- RandomByte?
- Base64Secret
- Base64UrlSecret?
- Generate
キー生成 †
対応プロバイダ †
Rfc2898DeriveBytes?を使用したキー生成
メソッド †
なし。内部利用のみ。
パスワード・ハッシュ化 †
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/Pwd
- GetPasswordHashV1.cs
- GetPasswordHashV2.cs
その他 †
部品の検証ツール †
暗号化プロバイダ・テスト・ツール †
以下のツールで、.NETの各種の暗号化プロバイダをテストできる。
暗号化・復号化ツール †
以下のツールで、各種、暗号・復号化 部品を検証できる。
このツールの使用前に、「ココ」と同じ手順で、証明書をインストールする。
このツールの使用する証明書のパスは、
- C:\root\files\resource\X509
- RSA
- SHA256RSA.cer
- SHA256RSA.pfx
- DSA
- SHA256DSA.cer
- SHA256DSA.pfx
- ECDSA
- SHA256ECDSA.cer
- SHA256ECDSA.pfx
- SHA384ECDSA.cer
- SHA384ECDSA.pfx
- SHA512ECDSA.cer
- SHA512ECDSA.pfx
- 以下は汎用認証サイトで利用
- SHA256RSA_Server.cer
- SHA256RSA_Server.pfx
- SHA256ECDSA_Server.cer
- SHA256ECDSA_Server.pfx
- SHA256RSA_Client.cer
- SHA256RSA_Client.pfx
- SHA256RSAClientCert?.pfx
参考 †
マイクロソフト系技術情報 Wiki †
.NET 開発基盤部会 Wiki †