密码学相关知识梳理
密码学的历史最早可以追溯到几千年以前,古今中外都有密码学运用的记载,从历史看,战争很大程度给密码学提供了应用环境,推动了密码学的发展,密码学按照发展历程,大体可以分为三个阶段,手工加密、机械加密和计算机加密阶段,下面是近代密码学的一些重要进展。
1949年,信息论始祖克劳德·艾尔伍德·香农(Claude Elwood Shannon)发表了《保密系统的通信理论》一文,把密码学建立在严格的数学基础之上,奠定理论基础,从此成为真正的科学。
1976年,密码学专家惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)两人发表了《密码学的新方向》一文,解决了密钥管理的难题,把密钥分为加密的公钥和解密的私钥,提出了密钥交换算法Diffie-Hellman。
1977年,美国国家标准技术研究所制定数据加密标准(Data Encryption Standard ),将其颁布为国家标准。
1977年,麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出RSA加密算法,RSA就是他们三人姓氏开头字母拼在一起组成的。
1997年4月,美国ANSI发起征集AES(advanced encryption standard)的活动,并为此成立了AES工作小组,经过几年的时间筛选,最终采用了由比利时的Joan Daemen和Vincent Rijmen设计的Rijndael算法,并在2002年5月26日成为有效的加密标准。
按密码体制划分:对称密码体制密码学和非对称密码体制密码学对应的有对称密码算法和非对称密码算法。
消息摘要算法又称散列算法,其核心在于散列函数的单向性,即通过散列函数可获得对应的散列值,但不可通过该散列值反推其原始信息,这是消息摘要算法的安全性的根本所在,我们通常使用该算法判断数据的完整性。
消息摘要算法我们常见比如MD(Message Digest)、SHA(Secure Hash Algorithm)、HMAC(Hash Message Authentication Code)等,常用于验证数据的完整性,是数字签名算法的核心算法。
我们以微信支付的接口调用分析一下摘要算法怎么应用的,首先可以打开微信支付如下相关文档:
微信支付统一下单接口文档
微信支付签名过程
对称加密简单的说就是加密和解密使用同一个密钥,解密算法是加密算法的逆运算。
对称加密算法主要有DES、DES算法的变种DESede、DES替代者AES算法、IDEA、PBE等
非对称加密算法称为双钥或公钥加密算法,跟对称加密算法不同的是,对称加密算法只一个密钥,非对称加密算法 一个公钥和一个私钥,一个用于加密,另外一个用于解密。
简单的说:一对密钥公钥A和私钥B,A加密只能B解密,B加密只能A解密。
非对称加密算法源于DH算法(Diffie-Hellman,密钥交换算法)由W.Diffie和 M.Hellman共同提出,该算法为非对称加密算法奠定了基础,下面我们先来了解下密钥交换算法DH和ECDH算法。
为什么需要密钥交换算法?前面我们提到对称加密算法加解密都是用同一个密钥,我们可以想一下,我们怎样能安全的把一个密钥给到对方呢?比如我们经常用到HTTPS,大家都说HTTPS加密了是安全的,那它加密的密钥怎么来的呢?很显然我们在访问一个https地址的时候,事先并没有密钥,访问过程中客户端跟服务端通过握手协议协商出来的密钥,如果服务端直接把密钥在网络上传输那肯定不安全的,所以这过程到底发生了什么?后面专门分析https的时候会详细写,这里先了解下该算法。
DH密钥交换算法的安全性基于有限域上的离散对数难题
ECDH密钥交换算法是基于椭圆曲线加密
从上面图中可以看出,DH&ECDH密钥交换算法交互双方都会向对方公开一部分信息,即所谓的公钥,这部分即使被别人拿到了也不会威胁到最终的密钥,这里很关键的一点是甲乙两方公布的公钥是不相同的,但是最终生成的密钥两边是一致的,这里是利用的算法原理,有兴趣的可以去查阅详细的算法公式,因为最终的密钥不需要传输给对方,所以很大程度保证安全性。
非对称加密算法:
比较典型的非对称加密算法有RSA、ECC、ElGamal,RSA算法基于大数因子分解难题,而ElGamal和ECC算法则是基于离散对数难题。
从上面消息传递模型我们可以看出,非对称加密算法遵循“私钥加密,公钥解密”和“公钥加密,私钥解密”的原则,但是有一点需要注意,公钥是公开的,所以用在什么场景是需要根据该算法的特征来考虑的,比如既然公钥是公开的,你用私钥加密敏感数据传递给第三方合适么?显然不合适,因为公钥公开的,别人都可以拿到公钥,也就意味着你加密的数据都可以解密,所以适合的场景比如私钥加密,公钥只是用来验证加密的内容,每个人都可以来验证,该场景是不在乎加密内容被其它攻击者看到的,甚至说内容本来就是公开的,对于接收者用公钥确保内容没有被篡改即可,所以我们通常说非对称算法“私钥签名,公钥验证签名”,另外一点,“公钥加密,私钥解密”,因为私钥只有我们自己手上有,所以理论上也只有我们自己可以解密,这样是安全的,https证书验证以及握手协议过程中会体现这一点。
数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说数字签名算法是非对称加密算法和消息摘要算法的结合体,遵循“私钥签名,公钥验证”的签名认证方式。
数字签名算法是公钥基础设施(Public Key Infrastructure,PKI)以及许多网络安全机制(SSL/TLS,VPN等)的基础。
数字签名算法要求能够验证数据完整性、认证数据来源,并起到抗否认的作用。
数字签名算法主要包括RSA、DSA、ECDSA共3种算法,其中RSA算法源于整数因子分解问题,DSA和ECDSA算法源于离散对数问题。
我们以蚂蚁金服开放平台上接口签名方案为例,详细说明可以打开如下文档:
蚂蚁开放平台签名专区
密码学的入门方法有什么?
学习基础知识:首先,你需要了解密码学的基本概念和原理。这包括了解什么是密码学、它的历史、它的应用领域以及它的主要目标。此外,还需要学习一些基本的数学知识,如数论、代数、概率论等,因为这些知识是理解和应用密码学算法的基础。学习密码学算法:密码学的核心是各种加密和解密算法。你需要学习一些经典...
码书是什么意思啊?
码书是学习编程的重要资源。通过码书,学习者可以系统地了解编程语言的基础知识,学习数据结构和算法,掌握软件工程开发实践等等。在学习编程的过程中,码书起到了承前启后的作用,帮助学习者梳理思路,形成系统性的知识结构,快速提高编程技能。另外,码书也是编程领域中技术革新的重要来源。码书的作者们总...
学好java要学哪些知识?
六、java主要学什么熟悉一种框架:熟悉一种框架其实是成为JAVA程序员的一种可选知识,但目前开发B\/S结构的应用的开发小组,都差不多会采用一种框架来构建自己的应用系统。框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开发使你可以省出很多的开发成本。目前比较流行的框架有Struts和Spring等。 j...
编码怎么学
学习编码方法有:学习编程语言、学习编程基础知识、学习编程工具、实践编程、参加相关社区和活动等。1、学习编程语言:首先要选择一种编程语言进行学习,目前比较流行的编程语言包括Java、Python、C++等等。你可以先了解一下它们的特点和应用场景,再选择自己感兴趣的进行学习。2、学习编程基础知识:在学习编程...
信息理论与编码学习指导内容简介
本书分为8章,涵盖了香农信息理论的核心内容、网络信息论基础以及密码学基础。每章包括学习要点、教材习题解析、测试题和实验题,旨在帮助读者全面理解信息理论的基本概念和重要知识点,并通过实践环节深化对分析思路、基本定理和关键结论的理解。本书的特点在于清晰的概念梳理、详尽的习题解答以及实验题的设计...
大学生来看C语言学习方法总结
C语言基础知识的方法:学习语法规则:学习 C 语言的基础知识,需要先了解 C语言的语法规则,包括变量类型、运算符、流程控制语句、函数、指针等。可以通过查阅相关的书籍或者网上的教程进行学o 练习编写代码:C 语言是一种编程语言,只有通过实际编写代码才能真正掌握它的基础知识。可以通过编写简单的程序来加深...
什么是学习码 滚动码 固定码 有什么区别
一、含义不同:1、固定码:地址码是固定不变的,虽然地址码是固定不变的,但它是由8位不同的地址码组合而成的,可以通过不同的组合来进行配对,这样就不会出现上述情况。遥控器固定码是相对滚动码说的,一般由PT2262\/2272组成的系统为硬件编码、固定码遥控系统。2、学习码:由百万组不同的编码组成...
编码对培养学生应用知识和学习知识有何启示?
编码对培养学生应用知识和学习知识的启示如下:1、强化逻辑思考力:写编码程序最重要的就是如何把大问题不断分割成小问题的过程,其中,必需去思考如何把代码合理的安排在整个程序中,才能让程序流程的处理输入、演算,直到输出,会让孩子对事物的逻辑分析能力有极大的提升。2、编码充满乐趣和创意:对于10岁...
0基础可以学习代码吗?
2. 熟练运用Java面向对象知识进行程序开发 3. 对Java的核心对象和组件有深入理解 4. 熟练应用JavaAPI相关知识 5. 熟练应用JAVA多线程技术 6. 能综合运用所学知识完成一个项目 知识点:1、基本数据类型,运算符,数组,掌握基本数据类型转换,运算符,流程控制。2、数组,排序算法,Java常用API,类和...
F9学什么
F9学习的内容主要包括财务与会计相关知识。F9作为一个重要的学科代码,主要涵盖了财务和会计领域的核心知识。以下是关于F9学习内容的详细解释:一、财务管理基础知识 在F9的学习中,首先接触的是财务管理的基础知识。这包括财务管理的概念、目标、金融市场与金融工具、资本成本等方面的内容。学生需要了解企业的...
姬索活力: 密码学学科分类编辑密码学传统学科Autokey密码置换密码二字母组代替密码(byCharlesWheatstone)多字母替换密码希尔密码维吉尼亚密码替换式密码凯撒密码摩尔斯电码ROT13仿射密码Atbash密码换位密码ScytaleGrille密码VIC密码(一种复杂的手工密码,在五十年代早期被至少一名苏联间谍使用过,在当时是十分安全的)流密码LFSR流密码EIGamal密码RSA密码对传统密码学的攻击频率分析重合指数经典密码学在近代以前,密码学只考虑到信息的机密性(confidentiality):如何将可理解的信息转换成难以理解的信息,并且使得有秘密信息的人能够逆向回复,但缺乏秘密信息的拦截者或窃听者则无法解读
尉氏县17643911403: 什么是密码学 - ?
姬索活力: 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学.电报最早是由美国的摩尔斯在1844年发明的,故也被叫做摩尔斯电码.它由两种基本信号和不同的间隔时间组成:短促的点信号" .",读" 的 "(Di);保持一定时间的长信号"—",读"答 "(Da).间隔时间:滴,1t;答,3t;滴答间,1t;字母间,3t;字间,5t.中文名:密码学 外文名:cryptology 作用:研究编制密码和破译密码 类别:科学技术 提出者:摩尔斯 应用学科:通信、计算机录
尉氏县17643911403: 密码学需要那些知识 - ?
姬索活力: 1. 现代密码基础理论 2. 纠错编码理论 3. Internet 网络的安全技术 4. 通信信息安全技术
尉氏县17643911403: 谁了解密码学的发展历史? - ?
姬索活力: 介绍密码学的发展历史 密码学的发展历程大致经历了三个阶段:古代加密方法、古典密码和近代密码. 1.古代加密方法(手工阶段) 源于应用的无穷需求总是推动技术发明和进步的直接动力.存于石刻或史书中的记载表明,许多古代文明,...
尉氏县17643911403: 密码学用到的数学知识 - ?
姬索活力: 基础的数学方面主要是微积分,高等代数,概率论,离散数学,组合数学,数论,量子密码学可能会用到量子力学
尉氏县17643911403: 问一下,有没有入门的密码学知识?各种解码方法??
姬索活力: 加密方法(叫密码学): 基本加密方法:置换加密方法(字母顺序重新排列)、替换加密方法(一组字母换成其他其他字母或符号) 演变加密方法:以上两种基本加密方法的组合、多重,越来越复杂.如:Autokey密码 置换密码 二字母组代替...
尉氏县17643911403: 求有关密码的一些知识 - ?
姬索活力: 谈起密码算法,有的人会觉得陌生,但一提起pgp,大多数网上朋友都很熟悉, 它是一个工具软件,向认证中心注册后就可以用它对文件进行加解密或数字签名,pgp所采用的是rsa算法,以后我们会对它展开讨论.密码算法的目的是为了保护信...
尉氏县17643911403: 现代密码学的特点是什么? ?
姬索活力: 密码算法可以看作是一个复杂的函数变换,C = F M, Key ),C代表密文,即加密后得... 密码学的一个原则是“一切秘密寓于密钥之中”,算法可以公开.当加密完成后,可以...
尉氏县17643911403: 计算机密码学中有哪些加密算法? - ?
姬索活力: 传统密码学autokey密码 置换密码 二字母组代替密码 (by charles wheatstone) 多字母替换密码 希尔密码 维吉尼亚密码 替换密码 凯撒密码 rot13 仿射密码 atbash密码 换位密码 scytale grille密码 vic密码 (一种复杂的手工密码,在五十年代早期...