自从最初在10.1版中发布以来,Wolfram语言中的密码学功能一直在显著增长。在最新版本中,我们增加了对表达式、文件和云对象的数字签名的生成和验证的支持;您可以对任何内容进行加密或数字签名——从简单的消息到图像或代码。为了维护用户的安全性,我们将算法基于OpenSSL库。尽管OpenSSL通常需要大量的使用经验,但与 Wolfram语言的集成使其变得简单。
在Wolfram语言中,对信息进行加密非常容易。使用Encrypt保护任何类型的数据时,您将在AuthenticationDialog窗口中输入密码以安全地保护数据:
这是从头到尾的整个加密过程。仅需两行Wolfram语言代码,即可使用从您的密码和行业标准密码派生的防弹密钥来保护您的数据。
Decrypt将返回您的初始数据,完全一样:
从任何其他编程语言中使用OpenSSL的过程要复杂得多。为了在C / C ++程序中使用OpenSSL 执行相同的简单但安全的加密过程,您需要通读耗时的文档。Python 和 R 根本不会在本地运行 OpenSSL,您需要选择和配置第三方加密程序包,然后分别安装 OpenSSL。
版本12.1中新支持的椭圆曲线键和数字签名使 Wolfram 语言用户可以广泛地使用区块链。目前,我们支持 secp256k1,这是比特币,以太坊,ARK和众多其他区块链所使用的椭圆曲线。在未来的 Wolfram语言版本中,我们计划支持其他标准曲线,例如 NIST推荐的标准曲线。
使用GenerateAsymmetricKeyPair生成基于椭圆曲线的私钥和公钥:
密钥生成后,将用于创建和验证数字签名:
此处使用的示例消息来自比特币区块链的区块0。添加对椭圆曲线数字签名的支持非常适合写入区块链。例如,在准备提交给指定的区块链之前,BlockchainTransactionSign在内部使用它们对交易进行签名:
您还可以使用数字签名来签名和验证图像或任何任意 Wolfram 语言表达式:
“知道您的密钥”
我们通过公共和私有密钥对象极大地扩展了用户的灵活性和自由度。在版本12.1中,PrivateKey和PublicKey可以从任意值计算密钥的所有必要部分。
在比特币,以太坊或 ARK **问任何区块链交易发送方的公钥:
通过粘贴必要的值(例如,作为十六进制字符串),使用在 Wolfram 生态系统外部生成的自己的密钥。PrivateKey 和 PublicKey 将完成其余工作:
要试验私钥和公钥的数学属性,可以指定一个任意值:
发明自己的私钥时请务必小心。如果你需要一个实际使用,最好使用内置的GenerateAsymmetricKeyPair 生成一对加密安全随机数生成。
一般而言,人们努力创建长的和随机且强壮的密码——通常会选择易于重用的短密码,从而使它们容易受到攻击并易于被黑客入侵。密钥派生函数GenerateDerivedKey(用于密码哈希和身份验证)加强了密钥:
处理文件
我们创建了EncryptFile 来将敏感数据保密,并且只有经过授权的人才能访问。这使研究、计算结果,Wolfram 语言代码或任何其他敏感信息得以加密和安全存储。
加密包含图像的文件,然后将结果写入新文件:
使用DecryptFile取回加密文件,然后将结果再次放入新文件中:
导入解密的文件:
此外,我们添加了GenerateFileSignature和VerifyFileSignature,用于对任何格式的文件进行数字签名和验证(甚至是云对象!)。这两个函数都使用 RSA 或椭圆曲线的安全性: