对称保序加密方案的实现
pyope的Python项目详细描述
这是boldyreva对称order-preserving encryption方案(Boldyreva’s paper)的实现。
支持的python版本:2.7和3.4+
disclaimer 1这是一个实验性的实现,在用于生产和/或敏感应用程序之前,应该对其进行彻底的检查和评估。
disclaimer 2boldyreva方案不是标准算法,因此没有测试向量和固定的明文密文 给定密钥的映射。这意味着,一般来说,由包的两个不同版本使用相同密钥加密的明文可能不相等。
快速示例
快速入门
frompyope.opeimportOPErandom_key=OPE.generate_key()cipher=OPE(random_key)assertcipher.encrypt(1000)<cipher.encrypt(2000)<cipher.encrypt(3000)assertcipher.decrypt(cipher.encrypt(1337))==1337
可以指定输入和输出范围。否则,使用默认输入(0..2^15-1)和输出(0..2^31-1)范围。
frompyope.opeimportOPE,ValueRangecipher=OPE(b'long key'*2,in_range=ValueRange(-100,100),out_range=ValueRange(0,9999))assert0<cipher.encrypt(10)<cipher.encrypt(42)<9999
关于保序加密
保序加密(ope)允许比较密文值以了解相应的关系 在潜在的明文之间。根据定义,保序加密方法比 传统的加密算法对于相同的数据量,因为前者泄露了明文的排序信息 价值观。
Ope如何有用?例如,有些系统可能需要ope来执行一组特定的查询(例如range sql 查询)加密数据。这些系统包括CryptDB和Monomi等等。
安全性
如上所述,boldyreva方案的安全保证比确定性加密方案的安全保证弱, 但是,如果加密密钥足够长,安全性仍然可以提高。建议使用随机生成的密钥 至少256位长。
运行测试
pytest用作测试框架。运行所有测试:
$ py.test tests/
待办事项
- 更多测试
- 优化性能
- 安全保证?
历史
0.1.0(2017-01-01)
- 使用“加密”而不是“pycrypto”