青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 赠送Gmail、Orkut的邀请加密技术在企业数据安全中的应用 »

密码学基础

  本文简要地介绍了现代密码学的一些基础理论,供参考。

  1 加密技术概述

  一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。

  对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。

  但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。

  于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。

  所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义——谁会花比正版软件更多的钱去买盗版软件 ?

  2 密码学简介

  2.1 概念

  (1) 发送者和接收者

  假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。

  (2) 消息和加密

  消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。

  明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。

  密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为:

  E(M)=C.

  相反地,解密函数D作用于C产生M

  D(C)=M.

  先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:

  D(E(M))=M

  (3) 鉴别、完整性和抗抵赖

  除了提供机密性外,密码学通常有其它的作用:.

  (a) 鉴别

  消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。

  (b) 完整性检验

  消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。

  (c) 抗抵赖

  发送者事后不可能虚假地否认他发送的消息。

  (4) 算法和密钥

  密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)

  如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。

  更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。

  尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。

  现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成:

  EK(M)=C

  DK(C)=M.

  这些函数具有下面的特性:

  DK(EK(M))=M.

  有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:

  EK1(M)=C

  DK2(C)=M

  DK2 (EK1(M))=M

  所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。

  密码系统由算法、以及所有可能的明文、密文和密钥组成的。

  基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍:

  2.2 对称密码算法

  对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。

  对称算法的加密和解密表示为:

  EK(M)=C

  DK(C)=M

  对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特——这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序列的运算)。

  2.3 公开密码算法

  公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。

  用公开密钥K加密表示为

  EK(M)=C.

  虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为:

  DK(C)=M

  有时消息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为:

  EK(M)=C

  DK(C)=M

  当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。

  2.4 单向散列函数

  单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m 。

  输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性:

  (1) 给定 M ,很容易计算 h ;

  (2) 给定 h ,根据 H(M) = h 计算 M 很难 ;

  (3) 给定 M ,要找到另一个消息 M‘ 并满足 H(M) = H(M’) 很难。

  在许多应用中,仅有单向性是不够的,还需要称之为“抗碰撞”的条件:

  要找出两个随机的消息 M 和 M‘,使 H(M) = H(M’) 满足很难。

  由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 。

  如 SHA 散列算法用于数字签名协议 DSA中。

  2.5 数字签名

  提到数字签名就离不开公开密码系统和散列技术。

  有几种公钥算法能用作数字签名。在一些算法中,例如RSA,公钥或者私钥都可用作加密。用你的私钥加密文件,你就拥有安全的数字签名。在其它情况下,如DSA,算法便区分开来了??数字签名算法不能用于加密。这种思想首先由Diffie和Hellman提出 。

  基本协议是简单的 :

  (1) A 用她的私钥对文件加密,从而对文件签名。

  (2) A 将签名的文件传给B。

  (3) B用A的公钥解密文件,从而验证签名。

  这个协议中,只需要证明A的公钥的确是她的。如果B不能完成第(3)步,那么他知道签名是无效的。

  这个协议也满足以下特征:

  (1) 签名是可信的。当B用A的公钥验证信息时,他知道是由A签名的。

  (2) 签名是不可伪造的。只有A知道她的私钥。

  (3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。

  (4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的公钥验证。

  (5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。

  在实际应用中,因为公共密码算法的速度太慢,签名者往往是对消息的散列签名而不是对消息本身签名。这样做并不会降低签名的可信性。

  注:本文由计算机专业相关教材整理



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/499.html
  • 文章排行:
  • 2.KWG
  • 月光还真是博学啊,您是否也是学密码的哦。我本科学的是信息安全,也算是密码学了。
  • 2009/1/13 22:09:13   支持(13)反对(9) 回复
  • 3.hyq768
  • 口令(明文) password(密文)
    85304 a8b2be8a9
    30471 18e2cefac
    314433 18f2cecae56
    8678 a882fe0
    60875 48e20efa8
    8273 a8c2feb
    838201 a8d20eaad54
    6012 48e29ea
    52747 78c2fecaa
    85235 a8b2aeba8
    3780 18920e8
    83115 a8d29e9a8
    7842 5862cea
    431053 68d29e8a856
    56472 7882cefaf
    2647 0882cef
    84115 a8a29e9a8
    54510 78a2de9ad
    6547 48b2cef
    4240 68c2ce8
    有谁知道,是用什么算法加密的,能看出来吗?
  • 2006/6/13 12:28:51   支持(13)反对(10) 回复
  • 4.青
  • 这次不用加长密钥 明文也不与密钥相加移位替代而是直接替代
    例子
    假如密码由1。2。3。4。5。6这六个数组成 可自定义下面6个序号表
    (1)ABCDEFGHIJKLMNOPQRSTUVWXYZ
    (2)NAWBPCQDRESFTGUHVIWJXKYLZM
    (3)SIATJBUKCVLDWMFXNFYOGZPHRQ
    (4)UNGAVPHBWPICXQJKYRKEZSLFTM
    (5)VQKFAWRLGBXSWHCYTNIDZUOJEP
    (6)WSNIEAXTOJFBYUPKGCZVQLHDRM
    应用时明文第一个字符与密码第一个字符所指的那个号对应
    假如明文是ABCDEFGHIJKLMNOPQRSTUVWXYZ 密码是342516
    由上面的密码与明文对应的密文是
    SNDFEAUBRBDBWQUYQCYEXLWDRM
    没看明白 明文是AAAAAA 密码仍是和上面一 密文是
    ANSUVW
    这下明白了
    实际应用时是比这个复杂些 多种表多种算法混合用 且依密码不同方式也不同
  • 2007/6/26 11:20:52   支持(9)反对(6) 回复
  • 5.青
  • 明文 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    序号 1 2 3 4 5 。。。。。。。。。。。。。。。。。。。。26
    口令 254136
    第一次加密 错位(依口令重排序)
    得到:D A F C B E J G L I H K P M R O N Q V S X U T W E Y Z
    第二次加密 替代 (产生与明文一样长的密钥)
    使口令 254136 变成 6 6 9 7 8 6 11 5 3 10 5 7 5 7 7 7 2 12 7 5 6
    依上面的长数与明文一一对应移位替代生成密文
    H H T P L N Q Q L R Q W U B T U W C Z A W F D D F
  • 2007/6/26 11:21:55   支持(13)反对(11) 回复
  • 6.shyen
  • 上面说的是ceacar cipher,,,^.^~
    最简单的一种,wiki上就有介绍。。。我17。
  • 2008/10/9 7:44:04   支持(9)反对(7) 回复
  • 7.yuxiao
  • 大家好:
    我是一名大学生,想考研究生,选择的专业是应用数学,由于我从小对于数字比较感兴趣,所以我感觉密码学这个专业很适合我,因此我想考这方面的研,有哪位师傅知道这个学科的应用主要是什么,实用不不实用?在社会上,主要在哪些方面来用,毕业后最可能在什么岗位工作?
    如过哪位知道,请发邮件给我,我先谢谢!
    汪世端 于 2014-4-13 10:24:45 回复
    国家有专门数字研究团对.看你有没有本事.自己加油
    汪世端 于 2014-4-13 10:28:23 回复
    国家有专门数字研究团对.看你有没有本事.自己加油
  • 2006/12/9 13:55:13   支持(12)反对(11) 回复
  • 8.williamlong
  • 其实密码学并不是很复杂,我们只要知道其具体原理即可,拿来即可使用,不必深究其数学原理,而且密码学在目前应用也是非常广泛的。
  • 2006/5/13 14:35:55   支持(9)反对(9) 回复
  • 9.xiaocainiao
  • 还是讲讲数论、近世代数实际点。
  • 2007/6/4 16:13:17   支持(9)反对(9) 回复
  • 10.tianmimi
  • 我是一名应用数学专业的学生。今年刚刚考上研究生,想学密码学,但不知道要学好该专业,在计算机方面有什么要求?想请教一下大家!谢谢!
    汪世端 于 2014-4-13 10:29:27 回复
    国家有专门数字研究团对.看你有没有本事.自己加油
  • 2008/5/29 9:22:31   支持(16)反对(16) 回复
  • 11.shyen
  • 我都哭了。。。我正在参加international cipher
    challenge...我刚接触这个,还是学校海报宣传的。。。
    看人家小学4年纪的参赛选手都比我好。。。都快崩溃了。。
    我只是个人参赛。。。。月光愿意和我组队吗????
    email我。。还有我人在英国可能回的比较慢。。。
    [email protected]
  • 2008/10/9 8:20:42   支持(10)反对(10) 回复
  • 13.张田田
  • 我是高中生,对这方面感兴趣,请推荐些入门的优秀书籍或者资料。
  • 2016/4/25 10:42:35   支持(0)反对(0) 回复
  • 14.王军
  • yuxiao
    你好,我是深圳一家电子行业的公司老板,我们所研发的产品有很多是需要破解密码的,需要大量这方面的人才.所以说密码学虽然是一个比较偏的学科,但是目前在电子行业的应用是非常方泛的,而且现在社会上也极其缺乏这方面的人才,我觉得如果你有这方面的特长,完全可以在这方面继续深造.你也可以和我联系,我可以给你提供这方面的就业机会,而且,请放心,这方面的人才待遇都非常的高.如果想继续了解一下社会上的应用,[email protected]
  • 2007/2/28 10:27:26   支持(13)反对(14) 回复
  • 15.yaye
  • 你好!我是初学者,我想问的是:学这个专业是不是一定要数学学得好呢?还有怎样才能把这个专业学?在此特向各位前辈请教,谢谢!
    汪世端 于 2014-4-13 10:30:51 回复
    加油
  • 2007/4/20 21:37:36   支持(11)反对(12) 回复
  • 16.hy
  • 7楼的朋友 我是门外妞 我加三条不知对不对啊
    99658 b872eeda7
    16596 3882de9ab
    03469 28d2ceea6
  • 2009/4/12 21:12:49   支持(10)反对(11) 回复
  • 17.williamlong
  • 你好,猫扑上都是非专业人士,我查看了一下提的问题都非常幼稚可笑,我想那里不适合讨论专业问题。
  • 2006/5/13 11:33:20   支持(7)反对(9) 回复
  • 18.WindElf
  • 去年看完达芬奇·密码之后曾对密码学感兴趣,但是后来发现太复杂了。
  • 2006/5/13 14:06:50   支持(9)反对(11) 回复
  • 19.hyq768
  • 口令(明文) password(密文)
    85304 | a8b2be8a9
    30471 | 18e2cefac
    314433 | 18f2cecae56
    8678 | a882fe0
    60875 | 48e20efa8
    8273 | a8c2feb
    838201 | a8d20eaad54
    6012 | 48e29ea
    52747 | 78c2fecaa
    85235 | a8b2aeba8
    3780 | 18920e8
    83115 | a8d29e9a8
    7842 | 5862cea
    431053 | 68d29e8a856
    56472 | 7882cefaf
    2647 | 0882cef
    84115 | a8a29e9a8
    54510 | 78a2de9ad
    6547 | 48b2cef
    4240 | 68c2ce8
    请高手帮忙,能看出来是用什么算法加密的吗?
    envy 于 2010-3-17 18:41:54 回复
    好像是这样的,不知道对不对,应该是个线性变换。
    数字从左到右,第一位,后面加8,第二位后面加2,第三位加e,第4为a,....最后一位不加,第一位变换规则就可以统计出来了,8-->a, 3-->1,6-->4,.....同理第二位也可以统计出来,
    5-->6, 0-->e, 1-->f,6-->8,0-->e,等等,从左到右,每一位,都有一个变换规则,根据这个规则进行变换即可
  • 2006/6/13 12:30:32   支持(10)反对(12) 回复
  • 20.玲玲
  • 我是一名应用数学学院的学生,也是学密码学的。虽然觉得密码学学起来不吃力,但是就感觉不到这个专业有什么出路 。
  • 2008/1/2 22:38:51   支持(8)反对(10) 回复
  • 21.xiaoyang
  • 你们QQ多少?
    我想和你们交流一下~
  • 2009/1/21 21:28:51   支持(8)反对(10) 回复
  • 22.大老鼠
  • 月光你好,我的一个朋友正是看了转发的这篇文章找到你的连接,把你的博客地址发给我的。
    那里不是没有专业人事,只是一般都不会讨论专业的问题。
    还是那句话:很喜欢你的博客。
  • 2006/5/13 17:22:15   支持(5)反对(8) 回复
  • 23.Shadow
  • 月光,你好。我是新人。我把你的百度七宗罪,转到了mop.
    其中有个人提出了很多我无法回答的问题,希望你能去解答一下。
    帖子地址:
    http://dzh.mop.com/topic/readSub_6613619_0_0.html
    谢谢。
  • 2006/5/12 22:47:01   支持(7)反对(11) 回复
  • 24.青
  • 加密方法一般是2种方法 字符替代和重按排次序 这次说的是字符替代
    所谓字符替代是N个集合相互映射关系 集合是用于组成明文的字符集
    我这个方法是N个集合相互映射
    假若明文是英文 其字符集是A---Z(其实是0---9 A---Z)那么做成的26X26的表是:
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    BAZYXWVUYSRQPONMLKJIHGFEDC



    YZABCDEFGHIJKLMNOPQRSTUVWX
    ZYXWVOTSRQPONMLKJIHGFEDCBA
    上面的表是一个正排 加一个倒排 移位形成的26X26的阵距表
    其实有很多种排法 这是其中的一种
    加密过程是 依密钥参数一一映射
    如密钥口令是OPEN 那么组成的移位表是
    OPQRSTUVWXYZABCDEFGHIJKLMN
    PONMLKJIHGFEDCBAZYXWVUTSRQ
    EFGHIJKLMNOPQRSTUVWXYZABCD
    NMLKJIHGFEDCBAZYXWVOTSRQPO]
    依上面的表形成的密钥是OPENOFMQNGL。。。。。。MRCPNQDO这104个字符所组成的移位参数
    应用是明文第一个字符与移位参数第一个字符O行的集合映射(就是最上面的表)
    明文第二个字符与移位参数第二个字符P行的集合映射


    明文的最后一个字符与移位参数O行(最后一个)的集合映射
    依上面形成的密文还可以做进一步处理
    如果明文少于104个字符在不知算法和口令的情况下就是并把明文与密文对照也很难发现其中的规律

  • 2007/6/26 11:18:17   支持(8)反对(12) 回复
  • 25.Edifier
  • 月光的数学基础是不是很棒啊。我觉得加密解密说到底全是数学问题啊。
  • 2007/11/25 9:44:09   支持(6)反对(10) 回复
  • 26.yangxiao
  • 我是一名数学专业的学生,我想问一下:我们除了当老师以外,我们还可以朝什么方向发展呢?并且和我们所学的数学知识又不是很远呢?我希望大家能回答我.谢谢!!!
  • 2008/4/5 17:09:16   支持(9)反对(13) 回复
  • 27.简单
  • 我本科是学通信工程的,现在想报考西电的密码学研究生,听别人说密码学一定要数学学得很好,我的数学不是很拔尖,不知报考密码学是否合适?谢谢!
  • 2008/9/15 22:41:41   支持(6)反对(10) 回复
  • 28.Han默
  • 你好!我是初学者,我想问一下学这个学历要多少?我很想学这个的。求问/
  • 2011/7/22 12:57:11   支持(7)反对(11) 回复
  • 29.青
  • 问一个简单的问题:加密不过是移位,替代,排序.不知还没其它的???
  • 2007/6/26 11:17:06   支持(6)反对(13) 回复
  • 30.123
  • 我所了解到的密码仅有3种:数字密码,移位密码和替代密码。
    不知那位大侠可否补充下?
    汪世端 于 2014-4-13 10:30:24 回复
    换位密码知道吗
  • 2008/2/2 1:15:11   支持(5)反对(12) 回复
  • 31.tangyouwei
  • 您在这方面写的文章很不错,技术讲的简单易懂,文学水平也很高。您可不可以去
    维!基!百!科!做点贡献?那里的中文文章实在太少了...

    还在怕“功夫网”吗:)
  • 2007/6/26 14:18:57   支持(6)反对(14) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.