比特币中所用到的密码学原理

1.哈希函数

密码学中的哈希函数有两个重要的性质,第一是哈希碰撞,哈希碰撞是指给定任意两个输入x、y,并且x≠y使得H(x)=H(y)。关于哈希碰撞有两个很重要的结论,其一哈希碰撞是必然存在的,因为哈希函数的输出空间往往是固定的,但输入空间可以是无限的,所以根据鸽笼原理哈希碰撞是必然存在的。其二是没有办法从理论上证明哈希函数是存在哈希碰撞的。这意味着没有高效的方法去人为制造哈希碰撞,所以哈希碰撞可以用来确定某一个信息是否被篡改过。

第二个性质是哈希函数的计算过程是单向不可逆的,我们没有高效的方法从哈希函数的输出来求的哈希函数的输入。不过这个性质的成立需要满足两个前提条件,一是输入空间足够大,二是输入的分布比较平均。所以我们对一个给定值x取哈希时通常会将x拼接上一个随机数一起取哈希即H(x ll nonce)。

2.签名

在讲签名之前先了解一下比特币账户,比特币中的账户是一对公私钥对,发起一个交易时使用自己的私钥进行签名,发布到网络中,系统中的其它节点可以使用公钥验证签名,这样就可以证明这笔交易确定是由你发起的。这里值得注意的一点是因为公私钥对会使用到哈希函数,所以在实现公私钥对的时候需要一个好的随机源。

原文地址:https://www.cnblogs.com/yishi-san/p/12512217.html

时间: 2024-10-09 05:23:27

比特币中所用到的密码学原理的相关文章

联营合营企业顺逆流交易在合并报表中抵消分录的原理讲解

下面通过两道例题来讲解一下处理原理: 逆流交易:例题:甲公司2012年1月1日取得乙公司20%有表决权股份,能够对乙公司施加重大影响.假定甲公司取得该项投资时,乙公司各项资产.负债的账面价值等于公允价值.2012年11月,乙公司将其成本为1200万元的商品以1800万元的价格出售给甲公司,甲公司将其取得的商品作为存货.至2012年12月31日,甲公司未对外出售该批存货.乙公司2012年实现净利润3200万元,假定不考虑所得税因素影响.先对个别报表分录进行分析:甲公司在按照权益法确认应享有乙公司2

ECshop中defined('IN_ECS')的实现原理

在PHP中经常看到如下代码 if (!defined('IN_ECS')) { die('Hacking attempt'); } 实现的原因以及原理如下: ecshop里的有些.php页是不需要用户通过url直接访问的,用来被其它页调用的,例如/includes/init.php,就不需要直接访问,通过url访问你的网址/includes/init.php是无意义的,所以我们在可以直接方问的php里加上define('IN_ECS', true); 例如在index.php中有如下代码,一开头

Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ 浅谈 Linux

MyBatis 中 Mapper 接口的使用原理

MyBatis 中 Mapper 接口的使用原理 MyBatis 3 推荐使用 Mapper 接口的方式来执行 xml 配置中的 SQL,用起来很方便,也很灵活.在方便之余,想了解一下这是如何实现的,之前也大致知道是通过 JDK 的动态代理做到的,但这次想知道细节. 东西越多就越复杂,所以就以一个简单的仅依赖 MyBatis 3.4.0 的 CRUD 来逐步了解 Mapper 接口的调用. 通常是通过 xml 配置文件来创建SqlSessionFactory对象,然后再获取SqlSession对

聊一聊 MySQL 中的事务及其实现原理

原文:聊一聊 MySQL 中的事务及其实现原理 说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 面试官:"事务的四大特性是什么?" 我:"ACID,即原子性(Atomicity).隔离性(Isolation).持久性(Durability).一致性(Consistency)!" 面试官:"在 MySQL 数据库的 InnoDB 引擎是怎么实现这四大特性的?" 我:"这个...这个....,还真没有了解过

比特币中的数据结构

1. 哈希指针 普通的指针存储的是某个结构体在内存中的地址,哈希指针除了要存地址还要保存结构体的哈希值. 2. 区块链 区块链就是一个一个的区块组成的链表,区块链和普通的链表的区别在于区块链使用哈希指针.比特币中一个区块主要包含两部分,一个是block header 这里主要包含上一个区块的哈希值.时间戳.挖矿难度.工作量证明随机数.该区块链交易Merkle Tree的根哈希值.下面是一张区块链示意图. 取哈希的时候是将整个区块的header内容放在一起取哈希,每一个区块哈希的取得是将前一个区块

比特币价值飙升,黑客如何从盗取近8千万美元的比特币中获利?

Hardy(晗狄) 架构师技术联盟 目前,有两个商机可以让人一夜暴富,一是中国房地产,另一个就是比特币.由于比特币的价值继续飙升,黑客从比特币挖掘服务中盗取了价值近8000万美元的比特币,短短数小时就获取暴利,看来唯一能跟中国房地产匹敌的,也就只有比特币了. 就在12月7号,网络犯罪分子从斯洛文尼亚的比特币采矿和交换服务系统NiceHash中窃取了大约4700个比特币(这些比特币可以用来挖掘新的比特币).自2017年9月以来,比特币的价值一直在急剧上升,在不到3月的时间内,从3.780美元上升到

ecshop中猜你喜欢的原理

最近在实现ecshop中的一个猜你喜欢的原理,一直不明白这个是如何猜的,难道是根据最近浏览记录来得到?百思不得其解,就放下了这个问题,一天在百度搜索东西的时候,突然发现这个右边有个猜你喜欢的功能,其实以前也知道,这里有这个版块,只不过没加注意,这次经过仔细观察发现,原来猜你喜欢的时候,就根据你搜索的相关结果,关联出一些同类产品. 举个例子,比如我搜索notepad2的时候,notepad++,editplus等软件就被列入了猜你喜欢的类别中,因此,在ecshop中如果我们记录了用户的浏览记录,通

Java中Atomic包的实现原理及应用

同步问题的提出         假设我们使用一个双核处理器执行A和B两个线程,核1执行A线程,而核2执行B线程,这两个线程现在都要对名为obj的对象的成员变量i进行加1操作,假设i的初始值为0,理论上两个线程运行后i的值应该变成2,但实际上很有可能结果为1.          我们现在来分析原因,这里为了分析的简单,我们不考虑缓存的情况,实际上有缓存会使结果为1的可能性增大.A线程将内存中的变量i读取到核1算数运算单元中,然后进行加1操作,再将这个计算结果写回到内存中,因为上述操作不是原子操作,