据我所知,实现的Charm方案只允许您加密随机生成的group元素或编码为group元素的msg字符串。但这些也有局限性,因为群元素的顺序是从质数派生的。
有没有一种方法可以扩展魅力方案来加密文件?
根据Artjom B的评论编辑:
def encrypt(self, pk, M, object):
key = self.group.random(GT)
c1 = abenc.encrypt(pk, key, object)
# instantiate a symmetric enc scheme from this key
cipher = AuthenticatedCryptoAbstraction(sha1(key))
c2 = cipher.encrypt(M)
return { 'c1':c1, 'c2':c2 }
f = open(pth,'r')
message = f.read()
pk, mk = abenc.setup()
att_list=['TWO','FOUR']
access_policy = '((four or three) and (two or one))'
sk = abenc.keygen(pk, mk, att_list)
ct = encrypt(pk, message, access_policy)发布于 2015-10-13 20:49:40
当需要加密任意数据时,则需要通过使用非对称密码系统加密随机元素,然后从该随机元素导出对称密钥来应用混合加密,以便使用所得到的密钥来加密实际数据。
Charm crypto提供了一个AES版本,用于加密任意消息/数据:
from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair
from charm.toolbox.symcrypto import AuthenticatedCryptoAbstraction, SymmetricCryptoAbstraction
from charm.core.math.pairing import hashPair as extractor
group = PairingGroup("SS512")
r = group.random(G1)
msg = b"This is a secret message that is larger than the group elements and has to be encrypted symmetrically"
symcrypt = AuthenticatedCryptoAbstraction(extractor(r)) # or SymmetricCryptoAbstraction without authentication
# encryption
ciphertext = symcrypt.encrypt(msg)
# decryption
recoveredMsg = symcrypt.decrypt(ciphertext)
assert msg == recoveredMsg
print(recoveredMsg)extractor()函数实际上是元素字节的SHA-256散列,因此可以处理所有类型的元素。
SymmetricCryptoAbstraction在CBC模式下使用AES加密数据,并使用随机IV和PKCS#7填充。它在内部是Base64编码的,但是被编码成了JSON字符串。这个类不适合加密文件,因为文件数据必须完全加载到内存中,并且可能不适用于大文件。使用pyCrypto使用渐进式加密对文件进行加密。
您必须创建自己的文件格式,以便容纳彼此相邻的非对称密文组件和对称密文组件。
https://stackoverflow.com/questions/33102245
复制相似问题