防弹加密的两行代码:Wolfram语言密码学发展的进展beplay体育官网下载appbeplay体育手机官网安卓版
加密功能在beplay体育官网下载app自成立以来一直在显著增长10.1版本发布.在最新版本,我们增加了对表达式、文件和云对象的数字签名生成和验证的支持;您可以对任何东西进行加密或数字签名——从简单的消息到图像或代码。为了维护用户的安全,我们的算法基于OpenSSL库。虽然OpenSSL通常需要大量的经验才能使用,但与Wolfram语言的集成使它变得简单。beplay体育官网下载appbeplay体育手机官网安卓版
加密
在Wolfrabeplay体育手机官网安卓版beplay体育官网下载appm语言中,加密信息非常简单。当使用加密要保护任何类型的数据,您将在AuthenticationDialog窗口以安全地保护您的数据:
![]()
& # 10005
model = ExampleData[{" geometric y3d ", "SpaceShuttle"}]; |
![]()
& # 10005
enc = Encrypt[AuthenticationDialog["Password", #Password &], model] |
这就是从头到尾的整个加密过程。只需两行Wolfram语言代码,您的数据就可以beplay体育手机官网安卓版beplay体育官网下载app使用由您的密码和行业标准密码派生的防弹密钥来保护。
解密将返回您的初始数据,完全一样:
![]()
& # 10005
解密[AuthenticationDialog["Password", #Password &], enc] |
从任何其他编程语言使用OpenSSL都要复杂得多。为了在使用OpenSSL的C/ c++程序中执行同样简单而安全的加密过程,您需要阅读耗时的文档。Python和R根本不是本地运行OpenSSL——您需要选择和配置第三方加密包,并单独安装OpenSSL。
区块链安全
12.1版新支持的椭圆曲线密钥和数字签名允许Wolfram语言用户beplay体育官网下载appbeplay体育手机官网安卓版广泛使用区块链.我们目前支持secp256k1,相同的椭圆曲线所使用的比特币,Ethereum,约柜以及无数其他区块链。在Wolfram语言的未来版本中,我们计划支持其他标beplay体育手机官网安卓版beplay体育官网下载app准曲线,比如下面这些NIST推荐的.
使用生成基于椭圆曲线的私钥和公钥GenerateAsymmetricKeyPair:
![]()
& # 10005
键= GenerateAsymmetricKeyPair["椭圆曲线"] |
密钥生成后,将用于创建和验证数字签名:
![]()
& # 10005
消息=“泰晤士报03/Jan/2009财政大臣濒临对银行的第二次救助”; |
![]()
& # 10005
签名= GenerateDigitalSignature[消息,密钥["PrivateKey"]]] |
![]()
& # 10005
VerifyDigitalSignature[{消息,签名},keys["PublicKey"]]] |
这里使用的示例消息来自块0比特币区块链。添加对椭圆曲线数字签名的支持可以很好地写入区块链。例如,BlockchainTransactionSign在准备提交到指定的区块链之前,在内部使用它们来签署事务:
![]()
& # 10005
arkTX = BlockchainTransaction[<| "BlockchainBase" -> {"ARK", "Devnet"}, " receiver " -> "DLesojAmpcA4jQbJDz5JKQ73k1RervJwfi", "Fee" -> 500000, "Amount" -> 5000000, "TransactionCount" -> 1|>] |
![]()
& # 10005
BlockchainTransactionSign[arkTX, PrivateKey[Association["Type" -> "EllipticCurve", "CurveName" -> "secp256k1", "PublicCurvePoint" -> {104531630294965477023234131465826965653137311559363531313000753535186 \ 469390907, 1064004877827006429213631211810629097826613779661960878181 \ 1804637106603}, "PrivateMultiplier" -> 4623341848327032493827435739758080348246702243644023284 \ 84386623284, "Compressed" -> True, "PublicByteArray" -> ByteArray[{3,231,26,206,92,803,224,194,24、207、131、164、219、131、21、1、243、142、42、166、89、103、207、196、217、90、115、24、228、151、216、47、103、217、53、81、190、188、237、119、237、194、2、245、72、113、217、144、69、50、10、255、52}]]]] |
你也可以使用数字签名用于签署和验证图像或任意的Wolfram语言表达式:beplay体育手机官网安卓版beplay体育官网下载app
![]()
& # 10005
GenerateDigitalSignature [\ !\(\ *SubsuperscriptBox[\(\[Integral]\), \(0\), \(\[Infinity]\)]\(Log[x]\ Exp[\(- \*SuperscriptBox[\(x\), \(2\)]\ [DifferentialD]x\)\) \)\), PrivateKey[Association["Type" -> "EllipticCurve", "CurveName" -> "secp256k1", "PublicCurvePoint" -> {10453163029496547723470293311559363531300075335 \ 186469390907, 106400487782700642978266224313779661960878181 \ 1804637106603},“PrivateMultiplier”——> 46233418483270324938274357397580608033403482 \ 46233418483270324938274357397580608033403482,“压缩”——>真的,“PublicByteArray”——>中ByteArray[{231, 26岁,206,92,80,143,224,194,24岁,207年,131年,164年,219年,131年,21岁的1,243年,142年,42岁,166年,89年,103年,207年,196年,217年,90年,115年,24岁,134年,168年,138年,59}],“PrivateByteArray”——>中ByteArray[{102年,55岁,48岁,2,13日,244年,228年,151年,216年,47岁,103年,217年,53岁,81,190,188,237,119,237,194,245,72,113,217,50岁,144年,69年,50岁,10日,255年,52}]]]] |
“了解你的钥匙”
我们通过公钥和私钥对象极大地扩展了用户的灵活性和自由度。在版本12.1中,PrivateKey而且PublicKey可以从任意值计算键的所有必要部分。
访问比特币、以太坊或ARK上任何区块链交易发送者的公钥:
![]()
& # 10005
BlockchainTransactionData["a93bfdff6679bc38cfdcd16cc38e34513fa2ee97186864e22cac5723864cde13", "SenderPublicKey", BlockchainBase -> "以太坊"] |
通过粘贴必要的值(例如十六进制字符串),使用在Wolfram生态系统之外生成的自己的键beplay体育手机官网安卓版。PrivateKey而且PublicKey会完成剩下的工作
![]()
& # 10005
private = PrivateKey[<|"Type" -> "EllipticCurve", "PrivateHexString" -> "E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262"|>] |
![]()
& # 10005
public = PublicKey[private] |
为了测试私钥和公钥的数学属性,你可以指定一个任意值:
![]()
& # 10005
PrivateKey[<|"Type" -> "EllipticCurve", "PrivateMultiplier" -> 100|>] |
在发明自己的私钥时一定要小心。如果您需要一个用于实际用途,最好使用内置的加密安全生成一对随机数生成与GenerateAsymmetricKeyPair.
一般来说,人们很难创建长、随机和强的密码——通常选择更容易重用的短密码,使它们更容易受到攻击和黑客攻击。GenerateDerivedKey,一个密钥派生函数(用于密码哈希和身份验证),增强密钥:
![]()
& # 10005
GenerateDerivedKey(“密码”) |
使用文件
我们已经创建了EncryptFile保持敏感数据的私密性,只有被授权的人才能访问。这使得研究,计算结果,Wolfram语言代码或任何其他敏感信息被加密和安全存储。beplay体育官网下载appbeplay体育手机官网安卓版
加密一个包含图像的文件,将结果写入一个新文件:
![]()
& # 10005
EncryptFile[AuthenticationDialog["Password", #Password &], FindFile["ExampleData/rose.gif"], "codedrose.mx"] |
使用DecryptFile要获得加密文件,再次将结果放在一个新文件中:
![]()
& # 10005
DecryptFile[AuthenticationDialog["Password", #Password &], "codedrose. "mx”、“rose.gif”) |
进口解密文件:
![]()
& # 10005
进口(“rose.gif”) |
另外,我们添加了GenerateFileSignature而且VerifyFileSignature用于数字签名和验证任何格式的文件(甚至云对象!)。这两个函数都使用RSA或椭圆曲线的安全性:
![]()
& # 10005
object = CloudPut[123, "test"]; |
![]()
& # 10005
keys = GenerateAsymmetricKeyPair["RSA"]; |
![]()
& # 10005
signature = generatefilesignsignature[对象,密钥["PrivateKey"]]] |
![]()
& # 10005
VerifyFileSignature[{对象,签名},密钥["PublicKey"]]] |
总会有更多
在Wolfram语言中获得更多的密码学知识beplay体育官网下载appbeplay体育手机官网安卓版从我们的文档中心或通过观看我解释最新功能的直播更详细地说。我们正在为未来的版本不断扩展和改进加密功能。如果你对我们应该优先考虑这个功能有什么想法,请在评论中告诉我们。
本产品包括由OpenSSL项目开发的用于OpenSSL工具包的软件。该产品包括由Eric Young编写的加密软件.
获得全面访问最新的Wolfram语言功能beplay体育官网下载appbeplay体育手机官网安卓版Mathematica 12.1或beplay体育手机官网安卓版Wolfram |一个审判。 |
我想Mathematica支持不同的曲线椭圆曲线密码学。
GenerateAsymmetricKeyPair和Generate/VerifyDigitalSignature是否使用OpenSSL?
如果我没有安装它怎么办?
谢谢你的评论,迭戈!
我们计划在下一个版本中支持更多常见的椭圆曲线——比如SEC和NIST推荐的椭圆曲线。你是正确的,GenerateAsymmetricKeyPair和Generate/VerifyDigitalSignature,以及Encrypt和其他加密功能在底层使用OpenSSL !
使用一个现有的私钥(假设它的补充公钥(不是由用户保存的)并将其作为元素/参数插入到GenerateAsymmetricKeyPair[]函数中,这样就可以派生出原始的公钥。理想情况下,这将再次生成原始的公钥/私钥配对对象。
目前,我必须使用PublicKey[itprivvatekey]来做到这一点(这将导致一个单独的公钥对象与私有对象分开)。另外,请注意,根据GenerateAsymmetricKeyPair中指定的原始类型(如“Bitcoin”),后续的PublicKey[itprivvatekey]方法并不总是提供原始的公钥(与原始配对对象相比)。显然,PublicKey[itprivvatekey]函数的结果可以导致一个与原始公钥的属性顺序不同的公钥。我认为这种不一致的属性顺序导致了原始公钥(在配对对象中)和单个派生公钥(相同的值..不同的顺序,导致不同的正方形图形图标)之间不相同的正方形图标图形表示。