是否有一种方法可以扩展Charm-Crypto方案来加密文件



据我所知,实现的Charm方案只允许您加密随机生成的组元素或编码为组元素的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)

当需要对任意数据进行加密时,则需要应用混合加密,即使用非对称密码系统对随机元素进行加密,然后从随机元素中导出对称密钥,以便使用生成的密钥对实际数据进行加密。

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以渐进式加密方式加密文件。

您必须创建自己的文件格式,以便将非对称密文组件和对称密文组件放在一起。

最新更新