【问题标题】:Can't decrypt blowfish CTR file with pycryptodome无法使用 pycryptodome 解密河豚 CTR 文件
【发布时间】:2018-05-02 13:01:22
【问题描述】:

我正在尝试恢复使用旧的纯 python 实现的河豚加密的文件。

旧代码依赖于单个 blofish.py 文件(版权所有 (C) 2002 Michael Gilfix)

旧数据被加密执行以下操作:

cipher = Blowfish(self.masterKey)
cipher.initCTR()
cleanData = cipher.decryptCTR(encData)

该代码未初始化现代河豚实现所需的随机数,因此我无法将其移植到 pycryptodome 函数

cipher = Blowfish.new(self.masterKey, Blowfish.MODE_CTR, nonce = ?????)
cleanData = cipher.decrypt(encData)

我能找到的唯一建议是在 initCTR 函数中,其中 iv 设置为 0(即使 CTR 模式没有 IV)

def initCTR(self, iv=0):
  """Initializes CTR mode of the cypher"""
  assert struct.calcsize("Q") == self.blocksize()
  self.ctr_iv = iv
  self._calcCTRBUF()

def _calcCTRBUF(self):
  """Calculates one block of CTR keystream"""
  self.ctr_cks = self.encrypt(struct.pack("Q", self.ctr_iv)) # keystream block
  self.ctr_iv += 1
  self.ctr_pos = 0

有人可以帮我吗?

【问题讨论】:

    标签: python-2.7 pycrypto blowfish pycryptodome


    【解决方案1】:

    首先,一些警告:

    1. 按照今天的标准,Blowfish 不是一种安全密码。使用 AES。
    2. 计数器模式 (CTR) 不安全,因为它检测不到对加密数据的恶意修改。使用 GCM、CCM 或 EAX 等其他模式。
    3. 计数器模式确实需要为每条消息提供一个随机 IV。但是,您使用的是 非常错误的固定 IV。

    要回答您的问题,您应该将密码初始化为:

    from Crypto.Util import Counter
    
    ctr = Counter.new(64, initial_value=0, little_endian=True)
    cipher = Blowfish.new(self.masterKey, Blowfish.MODE_CTR, counter=ctr)
    

    Counter 对象记录在here。它允许定义小端计数器(通常 CTR 是大端)。

    注意:blowfish.py 在大端机器和小端机器上的加密方式不同。

    【讨论】:

    • 这个想法是解密内容,然后使用 AES 加密到这里。您的解决方案仅部分起作用...它正确解密了前 8 个字符,但随后输出错误:结果:B8-CA-3A½ø0h£B3Æ« - 期待:B8-CA-3A-7E-F0-23
    • 我刚刚注意到,blowfish.sh 使用本机字节序作为计数器,并且很可能您的数据是在 little-endian 模式下加密的(CTR 通常在 big-endian 模式下计算)。因此,您需要使用 Crypto.Util.Counter。
    • 与计数器一起工作就像一个魅力。现在是时候升级到安全密码了
    • 说 CTR 模式不安全是不诚实的,因为威胁模型可能需要也可能不需要身份验证。 CTR 模式也可以在加密然后 MAC 环境中安全使用。注意:我一般不是 CTR 模式的支持者。还有很多时候 GCM、CCM 或 EAX 模式不可用。
    • @zaph CTR 模式本身就是“secure-with-a-lot-of-ifs”。普通开发人员很有可能会在脚上开枪,而使用 GCM/GCM/EAX 的可能性要小得多。
    猜你喜欢
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2016-02-29
    • 2019-03-26
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多