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".
  • 对椭圆曲线数字签名算法 (ECDSA),"EllipticCurve" 签名类型使用 FIPS 186-4 规范.
  • "EdwardsCurve" 签名算法使用 Edwards-Curve 数字签名算法 (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"要使用的扭曲 Edwards 曲线
    "HashingMethod""SHA512"怎样哈希原始表达式
    "SignatureType"Automatic数字签名生成模式
  • $CryptographicEllipticCurveNames 列出了 "CurveName" 的可用设置.
  • 使用曲线 "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)

生成基于椭圆曲线的密钥对:�based key pair:

用你的私钥生成数字签名. 此消息出现在 Bitcoin 区块链的 0 区块中:

用你的公钥验证数字签名:

用 RSA 密钥对一条消息进行签名并验证:

用你选择的散列函数对消息进行签名:

验证签名:

这相当于手动构建一个摘要并使用 "HashingMethod" -> None

验证签名:

用 RSA 密钥和你选择的哈希函数对消息进行签名:

用 Edwards 曲线数字签名算法对消息进行签名:

范围  (4)

消息类型  (3)

生成以字符串形式给出的现有消息的摘要的数字签名:

使用 "HashingMethod"None,因为你有一个已经哈希过的摘要:

在验证签名时,将不再对摘要进行哈希:

也可以用 ByteArray 提供已哈希过的摘要:

使用 "HashingMethod"None,因为你有一个已经哈希过的摘要:

在验证签名时,将不再对摘要进行哈希:

生成任意表达式的数字签名:

验证签名:

运算符形式  (1)

生成基于椭圆曲线的密钥对:

用你的私钥生成数字签名:

用你的公钥验证数字签名:

选项  (8)

Method  (8)

使用完整的 Method 选项,根据从你的输入推得的伪随机性生成确定性数字签名:

通过基于椭圆曲线的密钥使用 Schnorr 数字签名算法对消息进行签名:

生成类型为 "RSA" 的非对称密钥对:

用私钥为给定的字符串生成数字签名,使用 "SHA1" 哈希方法:

检查数字签名:

生成类型为 "RSA" 的非对称密钥对:

用私钥为给定的字符串生成数字签名,使用 "MD5" 哈希方法:

检查数字签名:

生成类型为 "RSA" 的非对称密钥对:

用私钥为给定的字符串生成数字签名,使用 "X931" 哈希方法:

检查数字签名:

生成类型为 "EllipticCurve" 的非对称密钥对:

用私钥为给定的字符串生成数字签名,使用 "Keccak512" 哈希方法:

检查数字签名:

指定 "Bitcoin" 以获取签名的其他参数:

生成 Bitcoin 区块链数字签名:

获取 DER-编码数字签名:

指定 "Ethereum" 以获取签名的其他参数:

生成 Ethereum 区块链数字签名:

获取签名的复原参数:

应用  (3)

加密货币网络  (2)

生成与 Bitcoin 网络要求兼容的数字签名:

生成与 Ethereum 网络要求兼容的数字签名:

对文件进行签名  (1)

生成椭圆曲线密钥对:

导入要签名的文件的内容:

为导入的文件字节创建签名:

同样,可通过直接对文件使用 GenerateFileSignature 来完成:

这两个签名都是可验证的:

可能存在的问题  (2)

如果 PrivateKey 的类型和 GenerateDigitalSignatureMethod 选项指定的 "Type"不匹配,则发出一条警告,并用私钥的类型计算数字签名:

此处, GenerateDigitalSignature 使用 "RSA"

不支持数字签名算法 (DSA):

Wolfram Research (2019),GenerateDigitalSignature,Wolfram 语言函数,https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html (更新于 2020 年).

文本

Wolfram Research (2019),GenerateDigitalSignature,Wolfram 语言函数,https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html (更新于 2020 年).

CMS

Wolfram 语言. 2019. "GenerateDigitalSignature." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html.

APA

Wolfram 语言. (2019). GenerateDigitalSignature. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html 年

BibTeX

@misc{reference.wolfram_2024_generatedigitalsignature, author="Wolfram Research", title="{GenerateDigitalSignature}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html}", note=[Accessed: 16-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_generatedigitalsignature, organization={Wolfram Research}, title={GenerateDigitalSignature}, year={2020}, url={https://reference.wolfram.com/language/ref/GenerateDigitalSignature.html}, note=[Accessed: 16-November-2024 ]}