课程简介 本课程涵盖区块链开发全部的必备密码学技术,包括密码理论、对称加密、分组密码、非对称加密、单向散列、消息认证、数字签名、证书、SSL
等部分。掌握常见的密码学接口和程序设计。 课程接口全部采用Golang实现Api的封装和调用,需要具备一定的Golang语言编程能力。 课程特色 1. 掌握密码学理论与信息安全常识。 2. 掌握对称加密、非对称加密(DES、AES、ECB、CBC、RSA)以及相关API调用与业务逻辑。 3. 了解常用散列算法与相关开发接口(MD5、SHA-1、SHA-224、SHA-256、SHA-512等)。 4. 掌握常用消息认证机制已经Golang中的应用。 5. 掌握常用必备的数字签名、证书(PKI、CA)等常用证书流程已经Go中的程序调用。 适用人群: 1.具备Golang编程基础人群; 2.区块链领域爱好者; 3.信息安全方向爱好者; 4.想要快速低成本掌握高薪新兴技术区块链智能合约相关专业方向的人群; 技术储备: 掌握go语言或者其他后端语言(C/C++/java/Python等)编程语言。 部分资料展示
1.3 秘钥
1.3.1 密码算法
用于解决复杂问题的步骤,通常称为算法(algorithm)。从明文生成密文的步骤,也就是加密的步骤,称为“加密算法",而解密的步骤则称为“解密算法"。加密、解密的算法合在一起统称为密码算法。
1.3.2 秘钥
密码算法中需要密钥(key)。现实世界中的“钥'',是像 这样的形状微妙而复杂的小金属片。然而,密码算法中的密钥,则是像203554728568477650354673080689430768这样的一串非常大的数字。
无论是在加密时还是在解密时,都需要知道密钥。
正如保险柜的钥匙可以保护保险柜中存放的贵重物品一样,密码中的密钥可以保护你的重要数据。即使保险箱再坚固,如果钥匙被盗, 里面的贵重物品也会被盗。同样地我们也必须注意不要让密码的密钥被他人窃取。
1.4 密码与信息安全常识
在继续下面的内容之前,我们先来介绍一些关于密码的常识。刚刚开始学习密码的人常常会对以下这几条感到不可思议,因为它们有悖于我们的一般性常识。
- 不要使用保密的密码算法
- 使用低强度的密码比不进行任何加密更危险
- 任何密码总有一天都会被破解
- 密码只是信息安全的一部分
1.4.1 不要使用保密的密码算法
很多企业都有下面这样的想法:“由公司自己开发一种密码算法,并将这种算法保密,这样就能保证安全。然而,这样的想法却是大错特错,使用保密的密码算法是无法获得高安全性的。我们不应该制作或使用任何保密的密码算法,而是应该使用那些已经公开的、被公认为强度较高的密码算法。
这样做的原因主要有以下两点:
从历史上看,密码算法的秘密最终无一例外地都会被暴露出来。例如: RSA公司开发的RC4密码算法曾经也是保密的,但最终还是有一位匿名人士开发并公开了与其等效的程序。
一旦密码算法的详细信息被暴露,依靠对密码算法本身进行保密来确保机密性的密码系统也就土崩瓦解了。反之,那些公开的算法从一开始就没有设想过要保密,因此算法的暴露丝毫不会削弱它们的强度。
要比较密码算法的强弱是极其困难的,因为密码算法的强度并不像数学那样可以进行严密的证明。密码算法的强度只能通过事实来证明,如果专业密码破译者经过数年的尝试仍然没有破解某个密码算法,则说明这种算法的强度较高。
稍微聪明一点的程序员很容易就能够编写出“自己的密码系统"。这样的密码在外行看来貌似牢不可破,但在专业密码破译者的眼里,要破解这样的密码几乎是手到擒来。
现在世界上公开的被认为强度较高的密码算法,几乎都是经过密码破译者长期尝试破解未果而存活下来的。因此,如果认为“公司自己开发的密码系统比那些公开的密码系统更强”,那只能说是过于高估自己公司的能力了。
试图通过对密码算法本身进行保密来确保安全性的行为,一般称为隐蔽式安全性(securitybyobscurity),这种行为是危险且愚蠢的。
反过来说,将密码算法的详细信息以及程序源代码全部交给专业密码破译者,并且为其提供大量的明文和密文样本,如果在这样的情况下破译一段新的密文依然需要花上相当长的时间,就说明这是高强度的密码。
网盘资料截图:
网盘下载链接已添加,回帖可见~··
|