一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 1718|回复: 8

聊聊数字签名2

[复制链接]
发表于 2012-2-4 02:23 | 显示全部楼层 |阅读模式
本帖最后由 cosine 于 2012-2-4 09:47 编辑

聊聊数字签名2

上回聊了聊签名与个体识别间的关系,最后提到了如果要用一组电子数据用来作身份识别,就得让数据不容易被伪造,这就得用到数据加密技术。这次就聊聊这个。

1. 加密的基本概念

加密说起来挺神秘的,其实说开了也很简单,就是把原始的信息(即明文)用一定的方法进行变化,使得变化后的信息对其他人变得不可读(即密文),这种变化的方法就是加密算法。举经典密码里的凯撒密码作为例子,这是一种替换式密码(也叫代换密码、移位密码),其实就是改变明文里字母的顺序号的方法进行加密,例如每个明文里的字母在密文里用它位置后面的第3个字母进行代替。这里我们设明文字母序号为x,密文字母序号为y,则加密算法为:

y=(x+n) mod 26  (n=3)

这样a就变为d,b就变为e,以此类推。还有一点需要说明,就是要区分加密算法密钥的区别,加密算法就是加密的方法,如上例中的y=(x+n) mod 26,密钥是加密时参与运算的一组数据,在上例中n的取值就是密钥(上面密钥取值是3)。加密算法可以是保密的或是公开的,但密钥一般情况下应该是保密的。

现在一般成为标准的加密算法很多都是公开的,但不要认为公开的算法就不安全,恰恰相反公开的成熟算法反而会更安全。由于算法公开,很多人就会研究它甚至尝试破解它,有什么缺陷就容易暴露而得到改进,反而是保密的算法由于研究的人少相对容易存在一些缺陷。而且成为标准的加密算法使用的人会很多,也很难作到算法的保密。

一个好的加密算法应该是这样的:“我把东西放在一个保险柜里,拿走了钥匙但留下了保险柜的设计图纸,可你就是打不开”。

另外注意这里的打不开指的是在有效的时限内打不开,信息的保密是有其时效的,而且随着科学技术的发展对于特定加密算法的破解时间肯定是逐渐缩短的。因此加密的目标不是永远保密,而是在目标时效内保密。就破解来说只有在时效内破解才是有意义的,超过时效就失去了意义。就比如说高考试卷的保密时效是到考试的那天,如果用某种加密算法对试卷进行了加密,你只有在考试之前破解才有意义,晚了…………

2.对称式加密

对称式加密指的是在使用加密算法进行加密和解密时,用的是同一个密钥,前面提到的恺撒密码里的字母偏移量的取移在加密和解密时就是一样的。另外一些加密方式中也得用同样的密钥,比如《潜伏》里余则成从收音机里抄下来的密码必须用加密时的同一本小说去解密,这也是对称时加密,密钥就是那本小说。

对称式加密发展到如今已经很成熟了,在计算机数据的加密上常见的有DES、3DES(Triple DES)、IDEA、AES等。

对称式加密的密钥是有一定长度的,一般来说越长安全性越好。DES是56位的密钥(实际是64位,含有8位校验码),后来因为安全性不足搞了3DES,就是用2-3个DES的密钥进行多重加/解密运算,密钥长度相当于112或168位。IDEA的密钥长度是128位,最早PGP就是使用的这个,但由于这是一个专利算法,因此在开源的GnuPG里不支持。AES是比较新的一种算法,密钥长度是128-256位,常玩无线路由的肯定在无线加密参数里见过。这个位数其实我们以前也见过,在IE的帮助-关于里就有密钥长度,早期的一些系统在使用网银时还要打128位加密的补丁,呵呵。

对称式加密算法运算速度比较快,加密强度也很好,但有一个问题需要解决,就是密钥分发的问题。为了保证加密体系的有效性,密钥必须是保密的而且是可靠分发的。而且如果要和多人通讯,为了互相保密,和每一个人之间的联系必须使用一个密钥,这就给密钥的分发与保管带来一些难题。

3.非对称式加密

非对称式加密算法有两个密钥,两个密钥用一些数学方法生成,由其中一个不能(实际上是在现有技术下极难)推算出另外一个。两个密钥一个用于加密另一个用于解密。有的算法是可逆的,即任意一个密钥都可以用于加密,同时另一个用于解密,有的只能用特定的一个加密而用另一个进行解密。这两个密钥称为一个密钥对

非对称式加密在使用中用于加密的密钥是公开的,称为公钥,用于解密的密钥是保密的称为私钥。公钥公开发布甚至保存在互联网上的服务器上任何人都可以获得,而私钥则由密钥对的所有者保管。当需要通信时加密者通过公开的途径获得公钥,将信息加密后发给密钥对的所有者,所有者收到密文后用私钥解密获得明文。这种机制就不存在对称式加密算法密钥分发和管理的问题,只要解决好私钥的保管及公钥的认证问题就好了。

非对称式加密一般源于一些数学难题,如两个大质数之积的分解问题等,安全性不错,但运算较慢。非对称式算法常见的有RSA、DSA、ElGamal等,密钥也有长度也是越长越安全,常用的密钥长度有1024位、2048位等。非对称式加密算法可以用于加密也可以用于数字签名,有的两种都可以例如RSA,有的只能用于签名如DSA,有的则只能用于加密如ElGamal。

4.哈希(Hash)算法

哈希算法也叫摘要算法,是一种散列算法,将任何长度的输入通过算法变成固定长度的输出。不同的输入可能有相同的输出,但由输出不能反推出输入,而且要极难找到具有相同输出的不同输入值。

哈希算法严格来说不能算是一种加密算法,但可以用于加密信息。例如最近的密码门事件根源就是用户的登录密码在网站的后台数据库里是用明文存储的,而如果是加密的则安全的多。但如果用对称式加密则只要掌握了密钥一样会泄密,但如果借助于哈希算法就可以比较好的解决这个问题。比如使用MD5算法,当你设置密码时系统会对密码进行MD5计算,生成128位的MD5值存入数据库。登录时再把密码进行MD5计算把生成的值与数据库里的值进行比较,相同即认为密码正解。由于哈希函数不能由输出反推输入,所以密码不会外泄,而且由于极难找到具有相同输出的不同输入值,系统也可以保证错误的密码不会登入系统。

常见的哈希算法有MD5、SHA1等,MD5生成128位散列值,SHA1生成160位散列值。由于王小云教授的工作目前MD5已经被认为不够安全,现在常见的系统里多数已经在使用SHA1算法,但这个算法好象也不是那么太让人放心,因此一些软件已经在使用更加高级的算法如SHA256等。

哈希算法除了应用于加密外,在保证信息完整以及数字签名方也有广泛的应用,这个我们下回再聊。
发表于 2012-2-4 08:18 | 显示全部楼层
不知道你的签名是哪种算法?
别人知道了可不可以解密?
回复

使用道具 举报

 楼主| 发表于 2012-2-4 09:31 | 显示全部楼层



    目前我常用的是DSA/1024位+SHA1,也可以用RSA的.安全性不用担心,这些都是成熟的算法,银行用的证书也不过如此,看看CFCA的根证书也就是RSA/1024+SHA1.实际使用习惯和环境安全性在整个体系中的重要性远高于算法本身.

CFCA证书.jpg

这个是工行的根证书,这些证书的信息在IE浏览器的选项-内容里就可以看到:

ICBC证书.jpg
回复

使用道具 举报

发表于 2012-2-4 13:15 | 显示全部楼层
吼吼,坏熊现在研究这个了?俺上学时《密码学》课程就是专门学的这个
回复

使用道具 举报

 楼主| 发表于 2012-2-4 15:22 | 显示全部楼层
吼吼,坏熊现在研究这个了?俺上学时《密码学》课程就是专门学的这个
fat 发表于 2012-2-4 13:15



    这个就是为了后面的实务操作作一点铺垫,呵呵.
回复

使用道具 举报

发表于 2012-2-4 15:37 | 显示全部楼层
这个就是为了后面的实务操作作一点铺垫,呵呵.
cosine 发表于 2012-2-4 15:22


说实话,这门学科太深奥了,要研究的话每种算法后面都是数学理论
回复

使用道具 举报

 楼主| 发表于 2012-2-4 16:28 | 显示全部楼层
说实话,这门学科太深奥了,要研究的话每种算法后面都是数学理论
fat 发表于 2012-2-4 15:37



    实际操作不需要了解详细的实现,只要知道大致的原理就行了.
回复

使用道具 举报

发表于 2012-2-4 17:34 | 显示全部楼层
你聊到了 MD5 , 我觉得现在MD5对于 口令(学过密码学的人会区分口令与密码这2个词)的加密也是不安全的。
现在多数的对于MD5有一个比较有效的攻击就是鲁莽攻击,也就是暴力破解。
步骤如下:
1 先对使用频率叫多的口令逐条做MD5,例如对“passw0rd”做MD5,得出“passw0rd”的散列值并记下来。
2 得出常用的口令与其散列值的组合,不多,估计少于1万条。这样就做出了一个明文与散列值对应的字典。
3 得到一个MD5散列值后查找字典。很快就可以找到明文。
回复

使用道具 举报

 楼主| 发表于 2012-2-4 17:51 | 显示全部楼层
本帖最后由 cosine 于 2012-2-4 17:55 编辑
你聊到了 MD5 , 我觉得现在MD5对于 口令(学过密码学的人会区分口令与密码这2个词)的加密也是不安全的。
...
chjj0 发表于 2012-2-4 17:34



    这里只是说明一下原理以及可能的使用场合.MD5目前已经被认为不够安全,但在一般的场合还是有地方在用,要求比较高的场合如电子商务的证书等基本全是SHA1了.你说的这种攻击必须得拿到数据库里的MD5值,呵呵.另外还有很多软件的下载链接附有MD5值供难软件,这种要想找到一个合适的碰撞就更难了,因为不是口令,而是一个软件,要想找到一个MD5一样的二进制执行代码还得是你想推送的是几乎不可能的,所以安全也是与用途及场合相关的,在一些场合下安全的算法,换一个场合可能就不再安全了.

你前面举的这人例子还是要收集常用的口令(实际如果系统不限制尝试次数,和穷举登录暴力破解是一回事),如果口令不在常用的范围内想找一个MD5相同的也是非常困难的.这实际不是MD5的问题,你就是用SHA256一样有这个问题,这实际是口令使用习惯及安全意识的问题,这已经不是算法能够解决的了,而是整个安全体系所要解决的问题.实际往往一个加密体系被攻破不是因为算法,而是由于不良的使用习惯.二战时德军密码机被破解与这个也是有一定关系的.
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-9-13 22:58 , Processed in 0.042658 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表