GenerateDigitalSignature[expr,key]
指定された秘密鍵 key を使って expr のデジタル署名を生成する.
GenerateDigitalSignature[key]
式に適用可能なGenerateDigitalSignatureの演算子形を表す.
GenerateDigitalSignature
GenerateDigitalSignature[expr,key]
指定された秘密鍵 key を使って expr のデジタル署名を生成する.
GenerateDigitalSignature[key]
式に適用可能なGenerateDigitalSignatureの演算子形を表す.
詳細とオプション
- デジタル署名はメッセージの信頼性を検証するために使われるもので,署名するデータと秘密鍵の両方に依存する.
- GenerateDigitalSignatureはDigitalSignatureオブジェクトを返す.
- DigitalSignatureオブジェクトはVerifyDigitalSignatureで検証できる.
- key はGenerateAsymmetricKeyPair[type]で生成されたPrivateKeyオブジェクトである.使用可能な鍵のタイプには"EllipticCurve","EdwardsCurve","RSA"がある.
- GenerateDigitalSignatureには次のオプションがある.
-
Method Automatic 署名法 - 設定Methodassocの assoc は使用する署名法の詳細を与える.
- 署名のタイプは鍵のタイプで決定される.鍵のタイプが判定できないときは,連想の"Type"要素で指定しなければならない.使用可能なタイプには"RSA","EllipticCurve","Schnorr","EdwardsCurve"がある.
- "EllipticCurve"署名アルゴリズムは「Elliptic Curve Digital Signature Algorithm」(ECDSA)にFIPS 186-4指定を使う.
- "EdwardsCurve"署名アルゴリズムは「Edwards-Curve Digital Signature Algorithm」(EdDSA)にRFC 8032指定を使う.
- "RSA"では,連想に次の要素が含まれるかもしれない.
-
"HashingMethod" "SHA256" もとの式をどのようにハッシュするか "HashName" Automatic 充填に使用するハッシュ名 "Padding" "PKCS1" 使用する充填スキーム - 現在サポートされている充填スキームは,"PKCS1"および"X931"である.
- "HashName"は,通常は"HashingMethod"と同じ値である."HashingMethod"がNoneに設定されているときは,"HashName"を与えなければならない.
- "RSA"については,"HashingMethod"ですべてのハッシュ関数がサポートされている訳ではない.サポートされているハッシュは,"MD4","MD5","RIPEMD160","SHA1","SHA224","SHA256","SHA384","SHA512","SHA3-224","SHA3-256","SHA3-384","SHA3-512"である.
- "EllipticCurve"と"Schnorr"では,連想に次の要素が含まれるかもしれない.
-
"CurveName" "secp256k1" 使用する楕円曲線 "HashingMethod" "SHA256" もとの式をどのようにハッシュするか "SignatureType" Automatic デジタル署名の生成モード - "EdwardsCurve"については,連想に次の要素を含めることができる.
-
"CurveName" "ed25519" 使用するツイストされたエドワーズ曲線t "HashingMethod" "SHA512" もとの式をどのようにハッシュするか "SignatureType" Automatic デジタル署名の生成モード - "CurveName"の可能な設定は$CryptographicEllipticCurveNamesにリストされている.
- 曲線"secp256k1"を使った暗号通貨は"CurveName"の設定としても使える.これには,"Bitcoin"と"Ethereum"が含まれる.暗号通貨を使うとDigitalSignatureオブジェクトの適切な追加的パラメータが与えられる.
- "HashingMethod"->Noneは expr のためのデジタル署名を直接構築するが,これをハッシュはしない.この場合,expr はバイト配列またはハッシュ文字列でなければならない.
- "HashingMethod"->"h"は,事実上,Hash[expr,"h"]を使って expr をハッシュする.
- "SignatureType"の可能な設定には以下がある.
-
"Deterministic" expr を擬似ランダム性のソースとして使う "NonDeterministic" システム特有のランダム性のソースを使う Automatic 可能な場合は非決定性メソッドを使う.その他の場合は決定性メソッドを使う - ハッシュ法の"Adler32","CRC32",およびNoneについては,"SignatureType""Deterministic"は"SHA256"を使って入力から擬似乱数を導出する.
例題
すべて開く すべて閉じる例 (5)
keys = GenerateAsymmetricKeyPair["EllipticCurve"]ユーザの秘密鍵を使ってデジタル署名を生成する.次のメッセージがビットコインブロックチェーンのブロック0に現れる:
message = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";signature = GenerateDigitalSignature[message, keys["PrivateKey"]]VerifyDigitalSignature[{message, signature}, keys["PublicKey"]]keys = GenerateAsymmetricKeyPair["RSA"];message = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";signature = GenerateDigitalSignature[message, keys["PrivateKey"]]VerifyDigitalSignature[{message, signature}, keys["PublicKey"]]keys = GenerateAsymmetricKeyPair["EllipticCurve"]message = "Would you marry me Amélie?";signature = GenerateDigitalSignature[message, keys["PrivateKey"], Method -> <|"HashingMethod" -> "RIPEMD160"|>]VerifyDigitalSignature[{message, signature}, keys["PublicKey"]]これは,要約を手作業で構築し"HashingMethod" -> Noneを使うことに等しい:
digest = Hash[message, "SHA256", "HexString"];signature = GenerateDigitalSignature[digest, keys["PrivateKey"], Method -> <|"HashingMethod" -> None|>]VerifyDigitalSignature[{digest, signature}, keys["PublicKey"]]RSAキーと選択したハッシュ関数を使ってメッセージに署名する:
keys = GenerateAsymmetricKeyPair[];message = "Would you marry me Amélie?";signature = GenerateDigitalSignature[message, keys["PrivateKey"], Method -> <|"HashingMethod" -> "MD5"|>]VerifyDigitalSignature[{message, signature}, keys["PublicKey"]]エドワーズ曲線デジタル署名アルゴリズムでメッセージに署名する:
keys = GenerateAsymmetricKeyPair["EdwardsCurve"];message = "The transaction is authorized.";signature = GenerateDigitalSignature[message, keys["PrivateKey"]]VerifyDigitalSignature[{message, signature}, keys["PublicKey"]]スコープ (4)
メッセージタイプ (3)
文字列として与えられた既存のメッセージの要約のデジタル署名を生成する:
digest = "03b55d86a0c211f943d1e333f53d1b17f6fc66079a15926b51613560f6f5dcf8";keys = GenerateAsymmetricKeyPair["EllipticCurve"]すでに要約をハッシュしてあるので"HashingMethod"Noneを使う:
signature = GenerateDigitalSignature[digest, keys["PrivateKey"], Method -> <|"HashingMethod" -> None|>]VerifyDigitalSignature[{digest, signature}, keys["PublicKey"]]すでにハッシュ済みの要約をByteArrayとして与えることもできる:
keys = GenerateAsymmetricKeyPair["EllipticCurve"]digest = ByteArray["ertiQstapidT0pBswTgCFlkAAQ2DPTN9YW6m0Ffeg9k="];ハッシュ済みの要約があるので"HashingMethod"Noneを使う:
signature = GenerateDigitalSignature[digest, keys["PrivateKey"], Method -> <|"HashingMethod" -> None|>]VerifyDigitalSignature[{digest, signature}, keys["PublicKey"]]keys = GenerateAsymmetricKeyPair["EllipticCurve"]signature = GenerateDigitalSignature[Range[20], keys["PrivateKey"], Method -> <|"HashingMethod" -> "RIPEMD160"|>]VerifyDigitalSignature[{Range[20], signature}, keys["PublicKey"]]演算子形 (1)
keys = GenerateAsymmetricKeyPair["EllipticCurve"]message = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";signature = GenerateDigitalSignature[keys["PrivateKey"]][message]VerifyDigitalSignature[keys["PublicKey"]][{message, signature}]オプション (8)
Method (8)
完全なMethodオプションのレイアウトを使って,入力から派生した擬似ランダム性に基づいた決定性のデジタル署名を生成する:
keys = GenerateAsymmetricKeyPair["EllipticCurve"];digest = "03b55d86a0c211f943d1e333f53d1b17f6fc66079a15926b51613560f6f5dcf8";GenerateDigitalSignature[digest, keys["PrivateKey"], Method -> <|"HashingMethod" -> None, "SignatureType" -> "Deterministic"|>]楕円曲線に基づいた鍵を使ってSchnorrデジタル署名アルゴリズムでメッセージに署名する:
keys = GenerateAsymmetricKeyPair["EllipticCurve"];signature = GenerateDigitalSignature["message", keys["PrivateKey"], Method -> <|"Type" -> "Schnorr"|>]VerifyDigitalSignature[{"message", signature}, keys["PublicKey"]]keys = GenerateAsymmetricKeyPair["RSA"]"SHA1"ハッシュメソッドを使って,指定された文字列の秘密鍵でデジタル署名を生成する:
signature = GenerateDigitalSignature[
"message",
keys["PrivateKey"],
Method -> <|"HashingMethod" -> "SHA1"|>
]VerifyDigitalSignature[{"message", signature}, keys["PublicKey"]]keys = GenerateAsymmetricKeyPair["RSA"]"MD5"ハッシュメソッドを使って,指定された文字列の秘密鍵でデジタル署名を生成する:
signature = GenerateDigitalSignature[
"message",
keys["PrivateKey"],
Method -> <|"HashingMethod" -> "MD5"|>
]VerifyDigitalSignature[{"message", signature}, keys["PublicKey"]]keys = GenerateAsymmetricKeyPair["RSA"]"X931"充填法を使って,与えられた文字列の秘密鍵でデジタル署名を生成する:
signature = GenerateDigitalSignature[
"message",
keys["PrivateKey"],
Method -> <|"Padding" -> "X931"|>
]VerifyDigitalSignature[{"message", signature}, keys["PublicKey"]]"EllipticCurve"タイプの非対称鍵のペアを生成する:
keys = GenerateAsymmetricKeyPair["EllipticCurve"]"Keccak512"ハッシュメソッドを使って,与えられた文字列の秘密鍵でデジタル署名を生成する:
signature = GenerateDigitalSignature[
"message",
keys["PrivateKey"],
Method -> <|"HashingMethod" -> "Keccak512"|>
]VerifyDigitalSignature[{"message", signature}, keys["PublicKey"]]"Bitcoin"を指定して署名に追加的なパラメータを得る:
keys = GenerateAsymmetricKeyPair["Bitcoin"]signature = GenerateDigitalSignature["message", keys["PrivateKey"], Method -> <|"Type" -> "EllipticCurve", "CurveName" -> "Bitcoin", "SignatureType" -> "Deterministic"|>]signature["DER"]"Ethereum"を指定して署名に追加パラメータを入れる:
keys = GenerateAsymmetricKeyPair["Ethereum"]signature = GenerateDigitalSignature["message", keys["PrivateKey"], Method -> <|"Type" -> "EllipticCurve", "CurveName" -> "Ethereum", "HashingMethod" -> "Keccak256", "SignatureType" -> "Deterministic"|>]signature["RecoveryParameter"]アプリケーション (3)
暗号通貨ネットワーク (2)
ビットコインネットワークの必要条件を満たすデジタル署名を生成する:
keys = GenerateAsymmetricKeyPair["Bitcoin"]digest = ByteArray["A4AaBgAEzCrPVgQzww83CF1KOa1UOwwACkJXIFN1cHBvcnQgOE0gCmZpc2hlciBqaW54aW4JL0JXIFBvb2wv"];GenerateDigitalSignature[digest, keys["PrivateKey"], Method -> <|"Type" -> "EllipticCurve", "CurveName" -> "Bitcoin", "HashingMethod" -> "SHA256SHA256", "SignatureType" -> "Deterministic"|>]イーサリアムネットワークの必要条件を満たすデジタル署名を生成する:
keys = GenerateAsymmetricKeyPair["Ethereum"]digest = ByteArray[
"A4AaBgAEzCrPVgQzww83CF1KOa1UOwwACkJXIFN1cHBvcnQgOE0gCmZpc2hlciBqaW54aW4JL0JXIFBvb2wvChQerJZv"];GenerateDigitalSignature[digest, keys["PrivateKey"], Method -> <|"Type" -> "EllipticCurve", "CurveName" -> "Ethereum", "HashingMethod" -> "Keccak256", "SignatureType" -> "Deterministic"|>]ファイルに署名する (1)
keys = GenerateAsymmetricKeyPair["EllipticCurve"]file = FindFile["ExampleData/ocelot.jpg"];
bytes = ByteArray[Import[file, "Byte"]];signature1 = GenerateDigitalSignature[bytes, keys["PrivateKey"]]これは,ファイルに直接GenerateFileSignatureを使っても行うことができる:
signature2 = GenerateFileSignature[file, keys["PrivateKey"]]VerifyDigitalSignature[keys["PublicKey"]][{
{bytes, signature1},
{bytes, signature2}
}]VerifyFileSignature[keys["PublicKey"]][{
{file, signature1},
{file, signature2}
}]考えられる問題 (2)
PrivateKeyのタイプとGenerateDigitalSignatureのMethodオプションで指定された"Type"が一致しない場合は,警告メッセージが出されて秘密鍵のタイプがデジタル署名の計算に使われる:
keys = GenerateAsymmetricKeyPair["RSA"]ここでは,GenerateDigitalSignatureは"RSA"を使う:
GenerateDigitalSignature["12f3", keys["PrivateKey"], Method -> <|"Type" -> "EllipticCurve"|>]private = First[Import["ExampleData/dsa-info.pem"]]GenerateDigitalSignature["message", private]関連するガイド
-
▪
- 暗号
関連するワークフロー
- 暗号化されたデジタル署名を作成し確認する
テキスト
Wolfram Research (2019), GenerateDigitalSignature, Wolfram言語関数, https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html (2020年に更新).
CMS
Wolfram Language. 2019. "GenerateDigitalSignature." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html.
APA
Wolfram Language. (2019). GenerateDigitalSignature. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html
BibTeX
@misc{reference.wolfram_2026_generatedigitalsignature, author="Wolfram Research", title="{GenerateDigitalSignature}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_generatedigitalsignature, organization={Wolfram Research}, title={GenerateDigitalSignature}, year={2020}, url={https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html}, note=[Accessed: 02-November-2026]}