为知笔记加密文档格式

2/1/2016

This content is not available in your language. The following is the Simplified Chinese version.

为知笔记(Wiz)的文档存储,是采用zip方式压缩的html文件,您可以使用任意的解压缩软件打开,例如WizZip, WinRAR或者7z。

为知笔记提供了文档加密的功能,使用加密功能后,为知笔记会把存储的zip数据采用RSA+AES方式重新加密,从而保证数据内容的安全。

为知笔记加密系统的证书

要给为知笔记文档加密,用户必须申请一个证书,证书就是RSA算法的N, e, d三个数据。其中公钥用于加密,默认保存在Wiz数据库里面,私钥用于解密,使用用户提供的密码作为key,采用AES算法进行加密后保存。用户可以选择将证书保存到数据库。用户可以选择备份成文件,或者备份到服务器(加密后的证书)。

  • 用户证书里面的公钥,采用明文存储,保存在为知笔记数据库里面,用于加密文档(加密后的文档无法用公钥解密,必须用私钥才可以解密)
  • 用户证书里面的私钥,使用用户提供的证书密码,采用AES算法加密,保存到Wiz数据库里面。用户可以选择备份成文件,或者被分到服务器(加密后的数据)。只有用私钥,才可以解密用户的文档。因此,用户必须提供证书以及相应的密码,才可以解密文档。
  • RSA算法密钥长度:1024bit
  • AES算法密钥长度:256bit

注意:为知笔记里面不保存任何用户证书的密码,因此用户如果丢失了证书的密码,将无法解密任何文档。

为知笔记文档加密流程

为知笔记文档加密,采用了RSA和AES混合加密的方式。加密流程如下:

  1. 随机生成两个GUID字符串连接起来作为AES加密的密钥。对于一个文档,每次加密的时候,该AES密钥都是不同的。
  2. 使用RSA算法,采用公钥加密保护步骤1产生的AES的密钥,加密后的密钥,保存在ziw文件头。该密钥必须使用证书里面的私钥进行解密。
  3. 使用AES算法,使用步骤1获得的随机密钥,加密原始的ziw(zip)文件,获得密文,保存在ziw文件头后面。

从上面的步骤可以看到,每一个加密ziw文档的密钥,都是随机的。ziw文档的安全性,取决于证书的私钥的安全性,也就是用户的证书以及证书的密码。

加密的ziw文件格式

加密的ziw文件,有一个文件头,记录了加密文档版本,算法,RSA密钥(密文)等数据,定义如下:

#pragma pack(1)

#define WIZKMZIWFILE_SIGN_LENGTH            4

#define WIZKMZIWFILE_KEY_LENGTH                128

#define WIZKMZIWFILE_RESERVED_LENGTH        16

struct WIZKMZIWHEADER

{

char szSign[4];

UINT nVersion;

UINT nKeyLength;

BYTE szEncryptedKey[WIZKMZIWFILE_KEY_LENGTH];

BYTE szReserved[WIZKMZIWFILE_RESERVED_LENGTH];

};

#pragma pack()

其中szSign是一个四个字节的文档类型标记,可能的值为:

ZIWR:RSA和AES混合算法加密的文档。

ZIWA:AES算法加密的文档。概算法目前未实现。

nVersion:加密文档的版本,目前为1。

nKeyLength:AES算法加密后的密钥的长度。不超过128个字节

szEncryptedKey:AES算法加密后的密钥数据。

szReserved:保留数据。全部为0

文档加密后的数据,被保存在文件头后面。

加密使用的算法库

Wiz加密使用的算法库,是著名的加密算法库Crypto++® Library。

安全性总结

为知笔记加密的安全性,取决于证书和用于加密证书的密码。要解密一个文档,必须提供证书以及用于加密证书的密码,二者缺一不可。因此我们建议您在初始化加密的时候,尽量设置一个比较复杂的证书密码,同时将该证书密码记在纸上,保存在安全的地方。

另外,为了方便多台电脑使用加密功能,您可以选择将证书备份到服务器上面。因为证书的密钥被您设置的密码加密了,因此您不用担心证书会被盗用。