聚合加密库,使用AES256CTR加密,使用纯文本的SHA256D哈希作为密钥。

convergent的Python项目详细描述


#聚合加密概述

该模块实现了收敛加密和生成派生的id 从明文中。

#要求

此模块取决于[pycryptopp][]或 [pycrypto][]作为AES-256分组密码的提供者。此依赖项必须是 手动解决。默认情况下,它使用pycryptopp(看起来有点 在我们的测试中速度更快),如果第一个密码不是 可用。

#用法和API

##收敛.sha256d

根据schneier和fergusson的定义,针对长度扩展攻击的sha-256扩展。基本上就是SHA256(SHA256(数据))

>>> from convergent import SHA256d
>>> s = SHA256d()
>>> s.update("Lorem ipsum dolor sit amet")
>>> s.digest()
"\xa1\xdbyA\x04\xf5\xa6S'1\xe7\xa0\xf3\xfd9\x07y2\xa3\xb9x\xcc\x9e%\x0f %\x9d\xa9\x00\xda\xd4"
>>> s.hexdigest()
'a1db794104f5a6532731e7a0f3fd39077932a3b978cc9e250f20259da900dad4'

##convergent.convergentenencryption

使用SHA256D和AES-256 CTR的聚合加密,增加了安全性和 生成重复数据消除内容可寻址存储的块ID。

加密lorem ipsum[^1]的示例:

>>> from convergent import ConvergentEncryption
>>> c1 = ConvergentEncryption("hard to guess secret")
>>> key, blockid, ciphertext = c1.encrypt(lorem)
>>> len(lorem) == len(ciphertext)
True
>>> c2 = ConvergentEncryption()
>>> plain_text = c2.decrypt(key, ciphertext)
>>> plain_text == lorem
True

###convergent.convergentencryption(机密,警告)

secret:防止确认文件的可选机密字符串 攻击和学习部分信息攻击。秘密是不需要 成功解密,但仅验证解密过程是否 成功。

警告:默认情况下为true,如果否,则向日志系统发送警告消息 秘密被泄露了。每个进程只记录一条日志消息。

###convergent.convergentencryption.set_convergence_secret(secret)

秘密:请参见上面的秘密。如果类用作 混入。这个秘密只能定一次。

不返回任何内容

如果已设置机密,则引发convertic.crypterror。

###convergent.convergentenencryption.encrypt(数据)

加密字符串数据

返回三元组:加密密钥(解密所需)、块 ID和加密数据。

###convergent.convergentencryption.decrypt(密钥,密文,verify=false)

使用密钥对密文进行解密。如果verify为真且收敛 密码已设置解密的纯文本已验证并收敛。密码错误 如果解密过程未成功,则引发。

###聚合。加密密钥(密钥、nonce、数据)

方便功能。en-或使用计算的一次性密钥解密数据 从nonce

nonce可能会公开,但只能使用一次,否则 系统变得不安全。

示例:

>>> import os, convergent
>>> nonce = os.urandom(32).encode("hex")
>>> ciphertext = convergent.encrypt_key("password", nonce,
                                        "this is totally secret data")
>>> ciphertext == "this is totally secret data"
False
>>> plain_text = convergent.encrypt_key("password", nonce, ciphertext)
>>> plain_text == "this is totally secret data"
True

[^1]:无换行符:“Lorem ipsum dolor sit amet,consectetur” 阿迪皮斯基廷精英,塞德·多洛尔·麦格纳 阿利卡。小维尼亚姆大学,乌兰科实验室 我不知道该怎么做。杜伊斯·奥特·伊鲁尔·多洛 代表性的是在无侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹侧腹。 不可预见的例外情况 值得一提的是Mollit动画ID Est Laborum。”

#加密详细信息

##SHA256D

SHA256(数据)(32字节)的输出再次输入SHA256。结果 32字节用作加密哈希。

##聚合加密和重复数据消除存储

聚合加密使用明文的加密哈希作为 加密密钥,使相同的明文始终加密为相同的 密文值总是相同的加密密钥。

该实现使用sha256d作为加密散列函数,使用aes-256作为分组密码。

通过对加密密钥应用加密散列函数存储id 当在寻址模式中使用时,可以构造为 同块解析的高效加密存储结构 同一个ID。

截至目前(2011年2月)至少有两个这种加密方案的弱点是 已知:[确认文件攻击并了解部分信息 攻击][攻击1]。两者都可以通过将一个秘密值混合到 加密密钥。

这个模块的工作如下,附加的秘密和合并步骤是 可选:

啊![聚合加密架构](py convergent encryption/raw/master/documentation/ce schema.png)

其中secret是至少32字节的随机字符串,而append是 通过首先用 纯文本和第二个秘密。

#更改日志

  • 0.2 2011-02-28公开发布
  • 0.1初始版本

#许可证

Copyright (c) 2011, HIT Information-Control GmbH All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of the HIT Information-Control GmbH nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL HIT Information-Control GmbH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

[附件1]:http://www.mail-archive.com/cryptography@metzdowd.com/msg08949.html [密码]:http://pypi.python.org/pypi/pycrypto [pycryptopp]:http://pypi.python.org/pypi/pycryptopp

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
默认情况下,JavaApachePOI锁定所有单元格。如何使所有单元格解锁?   java Play框架:为什么https url在使用“sbt dist”命令时不起作用?   ldap查询搜索筛选器中“&”的java意义   java构造不带警告的ImmutableSortedSet   用户界面Java GUI图形有多高效?   java在整个应用程序中使用相同的数据还是复制它?   java如何为所有打开的文档应用插入键操作   java存储setter方法的路径,以便以后可以调用它   java加载具有相同密钥的外部属性文件   Java通过inputmap跟踪击键   Java SSLSocket错误:无法从非静态上下文引用   java访问名为的文件的正确方式   java左括号打印在后缀中&右括号错误   java在循环中对齐数字列