Powershell 秘密鍵と公開鍵の生成しファイル出力するサンプル

PowerShell

セキュリティの勉強をしていると、秘密鍵と公開鍵、この鍵を利用した証明書の話がよく出てくるが、いまいちイメージがつきにくい。そこでポイントとなる秘密鍵と公開鍵の生成、ファイル出力させるサンプルを作成した。Powershellでは、RSAクラスを使うと簡単に実装が可能となる。

サンプルコード

# 共通 RSA オブジェクトを作成
$rsa = [System.Security.Cryptography.RSA]::Create()

# 秘密鍵の生成
#  RSA オブジェクトから、公開鍵を含むRSA パラメータ(RSAParameters 構造体)を生成する。
$parameters = $rsa.ExportParameters($true)

# 秘密鍵をバイト配列に変換
#$parameters には、秘密鍵や公開鍵のパラメータが含まれるが、うちDが、秘密鍵のパラメータ
#秘密鍵はバイト配列として保存される必要があるため
# 1、[Convert]::ToBase64String($parameters.D) によってバイト配列を Base64 文字列に変換し
# 2、[System.Text.Encoding]::ASCII.GetBytes() によって、Base64 文字列を ASCII コードでエンコードし
# 3、バイト配列に変換し格納している。
$privateKeyBytes = [System.Text.Encoding]::ASCII.GetBytes([Convert]::ToBase64String($parameters.D))

# バイト配列とした秘密鍵をファイルに書き込む
Set-Content -Path "privateKey.txt" -Value $privateKeyBytes -Encoding Byte

# 秘密鍵をファイルに書き込む(xml形式)
Set-Content -Path "privateKey.xml" -Value $rsa.ToXmlString($true) 


# 秘密鍵の生成
# 公開鍵のみのRSA パラメータ(RSAParameters 構造体)を生成する。
$publicKeyParameters = $rsa.ExportParameters($false)

# 公開鍵をバイト配列に変換
#RSA暗号において公開鍵はModulusとExponentの2つのパラメータで構成される。
#Modulusは公開鍵暗号化に使われる数であり、ExponentはModulusに関する指数
#これら2つのパラメータを
# 1、[Convert]::ToBase64String($parameters.・・・・) によってバイト配列を Base64 文字列に変換し
# 2、[System.Text.Encoding]::ASCII.GetBytes() によって、Base64 文字列を ASCII コードでエンコードし
# 3、バイト配列に変換し格納している。
$publicKeyBytes = [System.Text.Encoding]::ASCII.GetBytes([Convert]::ToBase64String($publicKeyParameters.Modulus) + "," + [Convert]::ToBase64String($publicKeyParameters.Exponent))

# 公開鍵をファイルに書き込む(Modulus,Exponent の順)
Set-Content -Path "publicKey.txt" -Value $publicKeyBytes -Encoding Byte

# 公開鍵をファイルに書き込む(xml形式)
Set-Content -Path "publicKey.xml" -Value $rsa.ToXmlString($false) 

参考サイト

RSAParameters構造体について

RSAParameters 構造体 (System.Security.Cryptography) | Microsoft Learn

構造体のフィールドを抜粋
DRSA アルゴリズムの D パラメーターを表します。
DPRSA アルゴリズムの DP パラメーターを表します。
DQRSA アルゴリズムの DQ パラメーターを表します。
ExponentRSA アルゴリズムの Exponent パラメーターを表します。
InverseQRSA アルゴリズムの InverseQ パラメーターを表します。
ModulusRSA アルゴリズムの Modulus パラメーターを表します。
PRSA アルゴリズムの P パラメーターを表します。
QRSA アルゴリズムの Q パラメーターを表します。
xml形式出力での仕様

RSA.ToXmlString(Boolean) メソッド (System.Security.Cryptography) | Microsoft Learn

ToXmlStringにtrue(公開鍵および秘密鍵を含める場合)を指定すると、結果の XML 文字列は次の形式になる。

<RSAKeyValue>  
   <Modulus>…</Modulus>  
   <Exponent>…</Exponent>  
   <P>…</P>  
   <Q>…</Q>  
   <DP>…</DP>  
   <DQ>…</DQ>  
   <InverseQ>…</InverseQ>  
   <D>…</D>  
</RSAKeyValue>  

ToXmlStringにfalse(公開鍵)を指定すると、結果の XML 文字列は次の形式になる。

<RSAKeyValue>  
   <Modulus>…</Modulus>  
   <Exponent>…</Exponent>  
</RSAKeyValue>  
ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました