• 1. 非对称加密实现软件LICENSE机制黄种龙 hzhonglong@linewell.com 南威软件研发中心
  • 2. 内容概述一点密码学的历史故事 数字签名与数字证书 JAVA与第三方加密解密库 软件产品授权管理系统的机制原理
  • 3. 分享的目标——了解散列函数、对称加密、非对称加密的概念; 了解数据签名与数据证书的概念; 了解JAVA安全领域中JCA和JCE以及第第三方JCE实现:BouncyCastle; 软件产品授权管理系统的机制原理;
  • 4. 一点密码学的历史故事第一点 密码体制划分 单向加密算法、对称加密算法、非对称加法三大类。 1、MD5、SHA算法是单向加密算法的代表,单向加密算法是数据完整性验证的常用算法。散列函数,又称哈希函数、消息摘要函数、单向函数或杂凑函数。 2、DES&AES算法是对称加密算法的典型代表,对称加密算法是数据存储加密的常用算法。此外还有PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体。 3、RSA算法是非对称加密算法的典型代表,非对称加密算法是数据传输加密的常用算法。对称加密算法也可以用做数据传输加密,但非对称加密算法在密钥管理方面更有优势。相对对称加密算法而言,非对称加密算法在安全级别上等级更高,但非对称加密算法在时间效率上远不如对称加密算法。
  • 5. 一点密码学的历史故事第二点 为什么RSA是现在地球上最重要的算法 1976年以前,所有的加密方法都是同一种模式:   (1)甲方选择某一种加密规则,对信息进行加密;   (2)乙方使用同一种规则,对信息进行解密。 由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"(Symmetric-key algorithm)。 这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
  • 6. 一点密码学的历史故事 1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。 这种新的加密模式被称为"非对称加密算法"。
  • 7. 一点密码学的历史故事 非对称加密的最初的设想: (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都 可以获得,私钥则是保密的。   (2)甲方获取乙方的公钥,然后用它对信息加密。   (3)乙方得到加密后的信息,用私钥解密。 如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信 就是安全的。
  • 8. 一点密码学的历史故事非对称加密设想的实现者:1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。久经30年的考验,这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
  • 9. 【内容】 什么是散列函数,以及用途举例。 数据签名简单介绍 。 从Bob、Susan、Doug三个人的故事理解数字签名与数字证书。 数字签名与数字证书
  • 10. 散列函数 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5/SHA1等等算法就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5/SHA1值也就是对应的“数字指纹”都会发生变化。
  • 11. 散列函数 散列函数,又称哈希函数、消息摘要函数、单向函数或杂凑函数。散列函数的主要作用不是完成数据加密与解密的工作,它是用来验证数据完整性的重要技术。通过散列函数,可以为数据创建“数字指纹”(散列值)。散列值通常是一个短的随机字母和数字组成的字符串。消息认证流程如图下所示。
  • 12. 散列函数在上述认证流程中,信息收发双方在通信前已经商定了具体的散列算法,并且该算法是公 开的。如果消息在传递过程中被篡改,则该消息不能与已获得的数字指纹相匹配。 散列函数具有以下一些特性: ❑消息的长度不受限制。 ❑对于给定的消息,其散列值的计算是很容易的。 ❑如果两个散列值不相同,则这两个散列值的原始输入消息也不相同,这个特性使得散列 函数具有确定性的结果。 ❑散列函数的运算过程是不可逆的,这个特性称为函数的单向性。这也是单向函数命名的 由来。 ❑对于一个已知的消息及其散列值,要找到另一个消息使其获得相同的散列值是不可能的, 这个特性称为抗弱碰撞性。这被用来防止伪造。 ❑任意两个不同的消息的散列值一定不同,这个特性称为抗强碰撞性。 散列函数广泛用于信息完整性的验证,是数据签名的核心技术。散列函数的常用算法有 MD(消息摘要算法)、SHA(安全散列算法)1及Mac(消息认证码算法)。
  • 13. 散列函数——数据的指纹散列函数,数据指纹应用。可以通过生成文件的MD5和SHA来防止多人上次同样的文件。可以通过文件的MD5和SHA散列数值确定散布到网络上的各个文件是否同一个文件,实现一个文件的多源点下载
  • 14. 数字签名简述 通过散列函数可以确保数据内容的完整性,但这还远远不够。此外,还需要确保数据来源的可认证(鉴别)性和数据发送行为的不可否认性。 完整性、可认证性和不可否认性,正是数字签名的主要特征。数字签名针对以数字形式存储的消息进行处理,产生一种带有操作者身份信息的编码。执行数字签名的实体称为签名者,签名过程中所使用的算法称为签名算法。 签名操作中生成的编码称为签名者对该消息的数字签名。 发送者通过网络将消息连同其数字签名一起发送给接收者。接收者在得到该消息及其数字签名后,可以通过一个算法来验证签名的真伪以及识别相应的签名者。这一过程称为验证过程,其过程中使用的算法称为验证算法(Verification Algorithm),执行验证的实体称为验证者。数字签名离不开非对称密码体制,签名算法受私钥控制,且由签名者保密;验证算法受公钥控制,且对外公开。
  • 15. 数字签名简述数字签名满足以下3个基本要求: ❑签名者任何时候都无法否认自己曾经签发的数字签名。 ❑信息接收者能够验证和确认收到的数字签名,但任何人无法伪造信息发送者的数字签名。 ❑当收发双方对数字签名的真伪产生争议时,通过仲裁机构(可信赖的第三方)进行仲裁。CA 在这里要提醒大家注意:私钥用于签名,公钥用于验证。 签名操作只能由私钥完成,验证操作只能由公钥完成; 公钥与私钥成对出现,用公钥加密的消息只能用私钥解密, 用私钥加密的消息只能用公钥解密。
  • 16. Bob、Susan、Doug 的故事BOB有两把钥匙,一把是公钥,另一把是私钥。
  • 17. Bob、Susan、Doug 的故事Bob把公钥送给他的朋友们----Pat、Doug、Susun----每人一把。
  • 18. Bob、Susan、Doug 的故事 Susun爱上Bob,给Bob写一封私密的情书。她写完后用Bob的公钥加密,就可以达到保密的效果。没有其他人, 除了Bob才可以阅读这封信。
  • 19. Bob、Susan、Doug 的故事 Bob收信后,用自己的私钥解密,就看到了信件内容。这里要强调的是,只要Bob的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
  • 20. Bob、Susan、Doug 的故事Bob读到了Susun的情书后,非常的高兴,马上写了回信。但是Bob 是个高调的人(他甚至有意无意的在朋友中,透露出SuSun爱上了自 己)。他回信的时候,并没有用私钥加密整封邮件。他只是通过散函 数计算了这封信的散列数值。然后用自己的私有密钥加密这个散数值, 这个散列数值加密后就是"数字签名"(signature)。 因为它是用Bob的私钥加密的,所在这个数字签名就像Bob的亲笔签名。
  • 21. Bob、Susan、Doug 的故事Bob回信给Susun的时候附上了这个数字签名。 注意:这个时候即使没有Bob公钥的中间人也可以阅读到这封信。
  • 22. Bob、Susan、Doug 的故事SuSun阅读了Bob热情洋溢的甜言回信,非常的高兴。由于太兴奋了,她 甚至开始怀疑这封信是不是Bob写给她的了。她马上用Bob的公钥解密了 附在信后面的签名文件。解密成功了。
  • 23. Bob、Susan、Doug 的故事热恋中的人的荷尔蒙是奇妙的。Susun又开始怀疑Bob的信会不会被人偷偷地 改过。她通过散列函数计算出Bob信原件的散列值(摘要),再使用Bob公钥解密 随信的数字签名后得到散列值(摘要),互相对比。现在,她可以确定这是没有被 人篡改过的BOB的亲笔信了。
  • 24. Bob、Susan、Doug 的故事Doug暗恋着Susun,一直偷偷的窃听着Susun的邮件。毫无疑问,他一 点也不满意Bob与Susun之间的恋爱。Doug无法知道Susun给Bob的 信件内容。却读到了BOB给Susun的回信。
  • 25. Bob、Susan、Doug 的故事嫉妒中的Doug想破坏这段良缘。他制作了一把自己的私匙。并从私钥 生成一把公钥。在一个难得的机会里,Doug用自己的公钥替换了 SuSun电脑上的Bob的公钥。
  • 26. Bob、Susan、Doug 的故事就这样。Doug使用Bob的公钥,冒充SuSun给Bob写信。又使用自己 私钥冒充Bob与SuSun通信。SuSun一点也不知道,自己电脑上的公 钥已经不是Bob的,而实际上是Doug假冒的。就这样Susun阅读着 “BOB”的信伤心欲绝。。。。。。。。。但是。
  • 27. Bob、Susan、Doug 的故事
  • 28. Bob、Susan、Doug 的故事为了证实自己的怀疑。Susun找到了Bob当面对质。很快,他们都明 白自己的通信被“中间人”假冒了。Susun很气愤,她要求Bob要有能 力去保证自己的公钥不被假冒。
  • 29. Bob、Susan、Doug 的故事Bob想到可以去找个第三方的权威机构来证明自己的公钥,确实是自 己发出去的。这样Susun就不会使用到仿冒成Bob的公钥匙了。 于是,Bob去和CA机构VeriSign公司签约了。签约过程就像在银行开 账号一样。
  • 30. Bob、Susan、Doug 的故事要帮助Bob捍卫爱情的Verisign公司有什么秘密武器呢?其实,Verisign 也有两把钥匙,一把是私钥,一把是公钥。
  • 31. Bob、Susan、Doug 的故事Verisign公司使用自己的私钥,加密了Bob的公钥匙,制作成一个数字 证书。
  • 32. Bob、Susan、Doug 的故事Verisign公司颁发给Bob的数字证书内容。Bob把这张数字证书,给了 SuSun,让她使用证书中的“Bob的公钥匙”
  • 33. Bob、Susan、Doug 的故事Susun拿到VeriSign颁发给Bob的证书后,她到Verisign的网站上下载 了Verisign的公钥。通过解密证书里面的内容,SuSun得到了Bob的公钥 。所以,现在没有人可以再仿冒Bob的公钥了。Doug也不行了,除非他能 偷出VersiSign的私钥,制作一张假的证书。Verisign公司显然不会让 这足以让自己公司倒闭和引起巨额赔偿的事情发生。
  • 34. 数字证书小结 通过Bob、Susan、Doug的故事。我们了解了,什么是数字证书。 可以说,数字证书是非对称加密算法公钥的载体。数字证书是网络用户的身份标表,包含ID、公钥和颁发机构的数字签名等内容。其形式主要有X.509公钥证书、SPKI(Simple Public Key Infrastructure,简单PKI)证书、PGP(PrettyGood Privacy,译为“很好的私密”)证书和属性(Attribute)证书。其中,X.509证书最为常见。我们俗称的数字证书,通常指的是X.509公钥证书。
  • 35. JAVA JCE与第三方提供者Java的: JCA(Java Cryptography Architecture,Java加密体系结构) JCE(Java Cryptography Extension,Java加密扩展包) ❑JCA提供基本的加密框架,如证书、数字签名、消息摘要和密钥对产生器。 ❑JCE在JCA的基础上作了扩展,提供了各种加密算法、消息摘要算法和密钥管理等功能。 我们已经有所了解的DES算法、AES算法、RSA算法、DSA算法等就是通过JCE来提供 的。有关JCE的实现主要在javax.crypto包(及其子包)中。JCA和JCE是Java平台提 供的用于安全和加密服务的两组API。它们并不执行任何算法,它们只是连接应用和实际 算法实现程序的一组接口。软件开发商可以根据JCE接口(又称安全提供者接口)将各种 算法实现后,打包成一个Provider(安全提供者),动态地加载到Java运行环境中。
  • 36. JAVA JCE与第三方提供者BouncyCastle JCE就是其中的一个安全提供者。安全提供者是承担特定安全机制 实现的第三方。有些提供者是完全免费的,而另一些提供者则需要付费。提供安全 提供者的公司有Sun、Bouncy Castle等,Sun提供了如何开发安全提供者的细 Bouncy Castle提供了可以在J2ME/J2EE/J2SE平台得到支持的API,而且 BouncyCastle的API是免费的。
  • 37. 软件产品授权管理的实现设计的授权管理系统中,只需要用到公钥密码技术,也就是非对称加密技 术;还有消息摘要算法技术。非对称加密,我们计划提供两种算法族:RSA 算法和ECC算法来。由用户在生成密钥的时候选择。 LICENSE授权机制,原理上很简单: 1、我们生成一对密钥,假设私有密钥叫做private.ks,公有密钥叫做public.ks。 2、创建一个描述有我们的产品信息和客户的使用限制的信息的一个文本文件,通过我们的私有密钥加密这个文本文件(这个私有密钥是我们必须严格 保密的)。我们把加密后的文件称为license.lic之类。 3、为了避免,有第三方使用自己的私有密钥加密一个字段结构和我们的“最 终产品信息文件”一样的文件,并把加密后的lic文件和其公有密钥替换我 们真实的lic和public.ks文件。此时我们必须计算出原始public.ks的散列数值,并把散列数值记录下,硬编码到到我们产品的发布版本中,用于校验public.ks文件的真实性。 4、在最终发布的软件产品中包含public.ks文件。用于lic文件的解密。
  • 38. 软件产品授权管理的实现授权生成的简单流程图
  • 39. 软件产品授权管理的实现发布的软件产品支持授权验证的简单流程图
  • 40. 软件产品授权管理的实现再概述下前面说的”最终产品信息“加密过程。
  • 41. 分享结束 谢谢