比特币的密码学原理解析

BelieveJG 2022-05-11 11:43:45

一、密码学

(1)简介

    密码学是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。

(2)常见的密码学算法[2]
    常见密码学算法:DES、AES、RSA、 ECC、Hash、Signature等。
        1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
        2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
        2、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael 算法;
        3、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法; 
        4、MD5(Message-Digest Algorithm 5):严格来说不算加密算法,只能说是摘要算法;
        5、ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

二、哈希算法

(1)简介[4]
    1、哈希算法是属于密码学算法范畴,主要是为了用来验证信息是否完整。
    2、哈希算法也叫散列算法,哈希是 Hash 的直译,通过哈希算法计算得到的值叫哈希值,也叫散列值。
    3、哈希算法的作用:就是把任意大小的数据转换成固定长度的数据
    4、哈希表的主要特征包括:雪崩效应、哈希值固定、哈希碰撞、单项计算
        ①哈希值固定:通过哈希算法运算得到的哈希值长度是固定的。
        ②哈希碰撞:不同的输入通过哈希算法计算得到相同的哈希值,这个是有可能存在的。
        ③雪崩效应:输入数据发生细微地改变,输出的结果会发生翻天覆地的变化。
        ④单项计算:不可逆性,加密后的数据是不能够解密出来的

        (2)常见的哈希算法[3]
    1、MD5
        1)MD5 即 Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一,主流编程语言普遍已有 MD5 实现。
        2)将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5 的前身有 MD2 、MD3 和 MD4 。
        3)MD5 是输入不定长度信息,输出固定长度 128-bits 的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个 128-bits 散列。
        4)基本方式为,求余、取余、调整长度、与链接变量进行循环运算,得出结果。
        5)MD5 计算广泛应用于错误检查。在一些 BitTorrent 下载中,软件通过计算 MD5 来检验下载到的碎片的完整性。
    2、SHA系列,通常是SHA-1
        1)SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
        2)SHA-1 曾经在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5的后继者。

(3)散列冲突
    理想中的一个散列函数,是希望达到 “key1 != key2 那么 hash(key1) != hash(key2)” 这样的效果,但是在真实情况下,要想找到一个不同的 key 对应的散列值都不一样的散列函数,几乎是不可能的,即使是 MD5 或者 由美国国家安全局设计的 SHA-1 算法也无法实现。
    
    Q:那么要如何解决散列冲突问题呢?
    A:常见的散列冲突解决方法有两类,开放寻址(open addressing)和链接法(chaining)。
    1、开放寻址(open addressing)
    定义:将散列函数扩展定义成探查序列,即每个关键字有一个探查序列h(k,0)、h(k,1)、…、h(k,m-1),这个探查序列一定是0….m-1的一个排列(一定要包含散列表全部的下标,不然可能会发生虽然散列表没满,但是元素不能插入的情况),如果给定一个关键字k,首先会看h(k,0)是否为空,如果为空,则插入;如果不为空,则看h(k,1)是否为空,以此类推。
    开放寻址法是一种解决碰撞的方法,对于开放寻址冲突解决方法,比较经典的有线性探测方法(Linear Probing)、二次探测(Quadratic probing)和 双重散列(Double hashing)等方法。
    公式:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) ,下列方法都是在调整di的值来解决散列冲突问题
        1)线性探测法
        2)二次探测法
        3)双重散列法
        4)随机散列法
    2、链接法(chaining)
    链表法是一种更加常用的散列冲突解决办法,相比开放寻址法,它要简单很多。
    基本思想:将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。
    
三、比特币[1]
    比特币一种点对点的电子现金系统,一个完全的点对点版本的电子现金将允许一方不通过金融机构直接在线支付给另一方。
    1、比特币的密码学原理
        1)哈希算法
            比特币在密码学中主要运用了哈希算法四大特征(性质)的哈希碰撞、单项计算性和雪崩效应
        2)签名
        比特币是一个去中心的系统,用户想要创建一个账户,只需要创建一个公钥—私钥对。
        公钥不需要进行保密,而私钥则保存在本地,需要保密。假设甲要给乙发送消息,甲用乙的公钥对消息进行加密,发送给乙,乙接收到消息之后用自己的私钥进行解密。
    2、比特币的数据结构
        1)区块连
             比特币中最基本的数据结构就是区块链。区块链就是由一个一个区块组成的链表,区块链和普通的链表的区别就是hash指针代替了普通的指针。
             每个区块包含一个前一个区块的hash指针,这个指针是对前一个区块整个信息进行hash出来的,包括前一个区块的hash指针,通过这种数据结构可以实现防篡改。因为,一旦改了某个区块的信息,那么它后面的区块的hash指针就要变化,后面的区块的hash指针一变,后面的后面的hash指针也要跟着变,所以这个数据结构的好处是,只要我们保存最后一个hash指针,那么区块链上任意一个区块发生改变,我们都可以知道
        2)Merkle tree
             区块链利用Merkle树的数据结构存放所有的叶子结点的值,Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。
             
        3)Merkle proof
               比特币中的节点分为两类,一类是全节点,一类是轻节点,全节点保存整个区块的内容(即有block header和block body),轻节点只保存block header。轻节点不包含block body,但是交易信息是在block body里面的,轻节点想要查询一个交易消息是否存在,则需要Merkle Proof。 

 

参考文献:

[1]https://blog.csdn.net/weixin_44920770/article/details/119892216

[2]https://blog.csdn.net/qq_41137136/article/details/86434796

[3]https://www.zhihu.com/question/20820286/answer/572449826

[4]https://blog.csdn.net/weixin_45492636/article/details/120562796

...全文
75 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
江信Python研究社区
加入

170

社区成员

一个专注于研究python语言的社区
社区管理员
  • 勤奋龙
  • 没有一分是自己的
  • Rye758
帖子事件
创建了帖子
2022-05-11 11:43
社区公告
暂无公告