【问题标题】:Golang Scrypt DecryptGolang Scrypt 解密
【发布时间】:2018-10-28 21:30:42
【问题描述】:

我试图在 Go 中模仿 Python 库 (https://pypi.org/project/scrypt/) 中提供的功能,用于解密 scrypt 生成的摘要(给定正确的密码)。

似乎 go 库只提供了一个用于加密数据的函数,而这个 python 库似乎不仅提供了这个功能,而且还提供了一种反转/解密摘要的方法,并提供了一个使用 scrypt 来实现更简单的函数路哈希函数。

我不是安全专家,也不懂数学/数字,所以我觉得尝试复制那个 python 库超出了我的理解范围。我认为这是可能的,因为 python 库似乎已经实现了它。

有谁知道我会从哪里着手解决这个问题。或者在他们的时间里慷慨地提供某种形式的示例代码来帮助我。

谢谢。

更新

scrypt 函数本质上是一个哈希函数。它使用密码作为派生摘要的一种方式:意思是,应该无法检索原始消息(经过哈希处理的消息)。

因此,有了这种理解,Golang 的 scrypt 接口不支持任何此类功能(例如 decrypt)是有道理的。但是 py-script 的 decrypt function 是如何工作的呢?

好吧,如果我回顾一下https://www.tarsnap.com/scrypt.html,它指出 scrypt 可执行文件提供了一个“加密实用程序”......

一个简单的基于密码的加密实用程序可用作 scrypt 密钥派生功能的演示。 scrypt 实用程序可以调用为scrypt enc infile [outfile] 来加密数据(如果未指定outfile,则将加密数据写入标准输出),或调用scrypt dec infile [outfile] 来解密数据(如果未指定outfile,解密后的数据写入标准输出)。

...在检查 py-script 后,我​​发现它嵌入了 scrypt 可执行文件的一个版本,这意味着 py-script 正在调用可执行文件的 encdec 函数。

因此,虽然我不一定知道 tarsnap 的加密实用程序是如何构建的,以及它在幕后所做的事情(例如正在使用的实际加密算法),但事实是 scrypt 只是真正设计为密钥派生函数和这些附加的 tarsnap 函数以支持加密/解密的方式使用该摘要输出。

【问题讨论】:

  • scrypt 并不是真正打算用作加密套件,encrypt/decrypt 只是作为演示(尽管tarsnap 使用)。您应该将scrypt 用于它最擅长的事情 - 密钥派生 - 并将加密留给为其设计的算法,如 AES。 Golang 的scrypt 接口非常适合前者,如果你打算使用加密/解密scrypt 设施,你要么必须包装scrypt 库本身,要么通过os/exec 调用scrypt 二进制文件。
  • @Integralist 指向 Golang scrypt 函数的链接将有助于解决问题。

标签: python go encryption scrypt


【解决方案1】:

scrypt没有解密,只有验证。

scrypt decrypt 函数所做的是获取一个密码和一个由 encrypt 函数创建的密码哈希,并通过对密码执行与 encrypt 函数所做的相同操作然后比较两个哈希来进行验证。

查看Golang 文档了解验证函数名称和用法。

scrypt 不解密,这是缺乏理解的开发人员用词不当。它甚至不是加密,它是一个加密散列函数,无法从中获得原始输入。

【讨论】:

  • 嗨@zaph,感谢您的回复。如果 scrypt 中没有此类支持的功能,我有兴趣了解 py-script 使用其“解密”功能做什么(请参阅此处的 py-script 的解密源代码:bitbucket.org/mhallin/py-scrypt/src/…)。我已经测试了该库函数,它确实能够接受摘要/哈希(由 scrypt 生成的摘要)以及密码,它会返回原始未加密的消息?
  • decrypt 函数名称错误,文档错误,不要使用甚至没有描述其作用的代码!来自文档: 1. 根据这些,可以使用以下函数制作一个简单的密码验证器:def hash_password(password, maxtime=0.5, datalength=64):def verify_password(hashed_password, guessed_password, maxtime=0.5)。使用这些功能。 2. 另请注意,错误消息中的 is 并没有真正执行解密:“scrypt.error: decrypting file would take too long”。
猜你喜欢
  • 2016-10-14
  • 2018-12-23
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2020-09-22
  • 2019-03-13
相关资源
最近更新 更多