需求需要对数据进行加解密,所以需要对一些常见加密算法做一些调研。
对称加密 Symmetric-key algorithms 有如下几个特点:
非对称加密 Public-key cryptography, or asymmetric cryptography 有如下几个特点
常见的非对称加密算法有:
RSA 和 ECDSA 的比较可以参考 ECDSA and RSA,简单的来说 ECDSA 有如下几个优点
RSA 的加密程度与 key 的大小成正比。
RSA maximum bytes to encrypt, comparison to AES in terms of security?
主要说明非对称加密算法之一的 RSA 在某些情况下对 plaintext 的大小是有限制的。
另外说明了非对称加密的通常使用方式是做 Enveloped Encryption
Why is asymmetric cryptography bad for huge data
主要说明非对称加密会消耗更对的空间来存储密文,比明文高出 49%。
相比非对称加密更慢消耗更多的性能,这点在移动设备上应该更为突出。
其中的一条补充应该是对 ref1 中:
the maximum size of data which can be encrypted with RSA is 245 bytes. No more.
的补充,所以我感觉用 “特性情况” 下对 plaintext 的大小有限制这样来表述比较准确。
另一条补充强调了任何的 public-key encryption 都会导致密文大小变大。
所以为了达到一个性能和安全性通用的程度,我们还是应该采取常见的 Enveloped Encryption 方式。
为了达到贴合 Bitcoin 的目的,可以使用 ECDSA 配合 AES 来对数据加密,具体的加密步骤如下:
对于每个文件的加密,都执行上述步骤,即每次的 AK 不同。
具体的解密步骤如下:
这样有几个好处:
上述步骤不能直接使用在数据需要分享的情况下,因为数据使用了公钥进行加密,解密时需要对应的私钥。
未来需要增加分享功能时,我们可提供功能,使得用户可以用他所期望的数据接收方的公钥、来使用上述步骤加密数据,数据接收方得到数据后,按上述的步骤进行解密即可。