加解密模块使得开发者可以很容易的在应用中使用加解密的相关功能,例如,加密信息,创建一个数据的hash值,比较hash值,看看数据是否被修改。
模块具有下列功能:
- 减少实现标准功能的开发代码,加解密模块实现了常用的加解密功能。
- 在应用和跨企业之间提供一致的加解密策略。
- 降低了开发者为应用建立一致的加解密架构所需的学习曲线
- 是可扩展的,意味着它支持自定义加解密的provider
一、加解密模块简介
包括下列主题:
- 通用解决方案
- 示例代码
- 什么时候使用加解密模块
- Key的管理和分布
- 选择算法
1.1通用解决方案
开发者在开发的时候,经常需要加密数据和hash功能来满足企业组织的安全需要。应用创建数据和管理数据,也包括配置信息,通常需要加密。另外,访问系统需要的密码和其他信息也需要hash。
加解密模块通过提供抽象出来的加解密provider来简化开发者的工作,可以通过配置,再不修改代码的情况下改变provider。
模块只支持对称加密算法,对称加密算法使用相同的key加密和解密。模块不支持非对称(也就是公钥)加密解密,使用一个key加密信息,使用另外一个key解密信息。
加解密模块的设计满足了开发者在开发应用的时候这方面的常用需求,下面列出了一些常用的解决方案,以供参考:
- 配置信息加密
- 加密数据
- 解密数据
- 获取数据的hash值
- 检查hash值是否和数据匹配
1.2示例代码
1.3什么时候使用加解密模块
在你需要hash数据,或者是对称加解密的时候,可以选择企业库的加解密模块。你也可以自定义加解密的provider。如果数据只需要加密,不需要解密,例如:密码。可以使用hash。如果数据需要加密和解密,那就选择对称加密算法。
使用对称加密的一个先决条件是发送数据的应用和接受数据的应用之间是可信任的。例如,发送方和接受方是同一个应用。这种限制通常会不适合一些需要网络传输数据的应用。在使用加解密模块的时候,有两点也需要考虑:
1)对称密钥的管理
2)选择hash值,还是选择对称加密算法
1.4管理和分布key
对称加密算法在加密和解密的时候使用同一个key,发送数据和接受数据的双方都必须要具有key。任何拿到这个key的应用也都可以加密和解密数据。这就意味着,如果攻击者获得key,就可以拿到加密的数据内容。攻击者也可以通过删除或者是破坏key,使得正常应用无法读取数据。一个key文件是一个加密文件,里面包括了加解密所需要的key。需要很小心的管理key,可以考虑下面的方式:
- 使用Access Control List (ACL访问控制列表)保护key,只有授权才可以访问key文件。
- 在高危环境关闭电脑的远程调试。例如,服务器的匿名访问。
加解密模块将每一个key文件存在在本地计算机,配置节<securityCryptographyConfiguraion>中包含了每个文件的绝对地址。为了保护key,在写入文件的时候使用了DPAPI加密了key信息。如果使用加解密,一定要保证路径地址也是加密值。例如,你可以将ACLs值包含在路径加密值中。如果应用需要其他硬件辅助的加密,需要修改模块的源代码来满足需求。
模块不完全解决key的分发问题。如果key只是在自己的安全的计算机上使用的话,很容易解决分发问题。但是,如果是在多个地方共享key,需要仔细的计划。一个办法是用企业库的配置工具,在你分发之前导出key文件。导出key的时候设置一个password。在另外的地方使用企业库配置工具导入key的时候需要输入密码。
1.5算法的选择
如果一个加解密算法被破解,或者算法是很容易被暴力破解的,加解密provider就不是安全的。自定义的算法在没有测试的时候是很容易被破解的。相反,使用公用的,著名的加密算法是经得起考验的。
如果计算能力增加的话,推荐增加key的长度。目前情况,加密key的长度在128-256位之间是较为安全的,目前大多算法至少都是128位。
hash算法中,推荐用算法,算法使用的hash大小是256位。SHA1 hash算法是16位的,这种算法是可以接受的,但是不够的。MD4和MD5不在推荐使用。
对称加密算法中,推荐使用,也叫做Rijndael。这个算法的key长度支持128、192、256位。DES算法不在推荐使用。