摘要:BTC属于加密货币,其中必然涉及到密码学的知识,而比特币比较开放,交易记录,交易金额甚至是底层源代码都是对外开放,那么加密使用在何处?这里就来谈一谈······
哈希函数是密码学的一个重要分支,它是将任意长度的输入变换为固定长度输出的不可逆的单向密码体制,在消息完整性检测(消息认证)和数字签名等方面有广泛的应用。Hash函数也称散列函数,是一种单向密码体制,即它是一个从明文到密文的不可映射的过程,即只有加密过程,没有解密过程
collision resistance:如果x!=y,那么H(X)!=H(Y),对于一个给定的x很难找到y使得H(X)=H(Y)
hiding:已知H(X)无法反推出X,类似于X被隐藏起来了
puzzle friendly:对H(X)的范围是无法预测的
哈希碰撞:对于给定的X和Y,且X!=Y,有可能会得到Hash(X)=Hash(Y),这种情况则称为哈希碰撞。而collision resistance的性质保证如果有Hash(X)!=Hash(Y),则必然有X!=Y(但是这是理想状态,如果学过数据结构的同学应该知道常用的碰到哈希碰撞的解决办法有开放地址法等等)。在实际使用的过程中,哈希碰撞总是难以避免,但是我们只需要尽可能保证在X!=Y的前提下,使得Hash(X)!=Hash(Y),就可以认为其是collision resistance
collision resistance的意义:如果我们掌握了一条重要信息X,希望别人知道我有X,但是不希望别人知道X的具体信息,就可以通过告诉别人X的哈希值。由于collision resistance性质的保证,别人没有X,也就没有对应的Hash(X),因此别人也就知道你确实有X这一条信息。
hiding:我们认为,给定X和Hash(),可以很容易得到Hash(X),但没有办法在已知Hash(x)和Hash()的情况下,反推出X的具体取值,当然这也是一个理想的情况。
collision resistance和hiding结合实现digital commitment(数据保证): 可以拿市值预测的案例,某个人对某个市值进行预测,我们如何保证能够知晓其预测是否准确?最简单的是提前公布, 等待实际结果出现后验证。但实际中,当提前发布预测后,可能会由于预测者本身对市值实际结果造成影响(比如该预测者是业内极具影响力的人物)。 所以,应该将提前将其写于纸上并密封,交给第三方机构保管,等到实际结果出现后开启密封与实际对比,这就是digital commitment。而第三方机构需要能够使人信服,在实际生活中,有很多场景并不存在一个这样的第三方机构,而区块链技术正为此提供了一个很好的解决方法。 我们把预测结果看作X,提前公布Hash(X),等到预测结果发生时间来临后,公布X,如果根据X可以得到公布的Hash(X),则说明公布的X确实为所预先预测的 内容。从而,我们可以实际进行判断预测是否准确。实际使用中,为了X足够大,会对X进行“加盐”,对X拼接一 个nonce,对其整体取Hash。
Puzzle friendly:该性质要求哈希值计算事先不可预测, 仅仅根据输入很难预测出输出。例如:我们需要一个哈希值,存在于某一个范围内,只能通过不停运算查找出 来。该性质保证了比特币系统中,只能通过“挖矿”获得BTC。也就是说,该性质保证了工作量证明(POW)机制 可以运行下去【“挖矿难,但验证易”】。 在BTC系统中采用SHA-256和RIPEMD160哈希函数
挖矿实际就是一个不断测试区块头部(block header)的随机数部分nonce使得整个区块头的哈希值满足H(block header)<= target的过程,这里的target通常前面x位都是0
区块的构成有区块头(block header)和区块体(block body)组成:
区块头的随机数就是nonce
手写签名是被签文件的物理组成部分;数字签名是连接到被签消息上的数字串
数字签名和所签名的消息能够在网络中传输。手写签名使用传统的安全方式传输
手写签名是通过将它与真是的签名进行对比来验证正确与否;而数字签名是利用公开的验证算法来验证
数字签名的复制品是有效的;手写签名的复制品是无效的。
数字签名是0和1的字符串,因消息而异;手写签名是模拟的,因人而异
接受者能够核实签名者对消息的签名
除了签名者,任何人不能伪造消息的签名
同一消息不同时刻其签名是有区别的
签名者事后不能抵赖对消息的签名,出现争议时,第三方可解决争端
在BTC系统中创建账户只需要生成一个公私钥对。公私钥对保证了“数字签名”的应用。大致流程如下:比如A转给B,A需要用自己的私钥给该交易签名,B通过A的公钥来验证该交易是否由A发起(保证了交易的安全性)。你可能会担心是否会有两个人有相同的公私钥对,其实不必担心,签名算法中创建相同公私钥对的可能性微乎其微,所以通过大量创建账户来盗取他人交易的做法是不可行的
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
有没有办法在Rails中为确认字段自定义消息?例如在设计中我必须输入密码和password_confirmation并且错误消息是:Passwordconfirmationdoesn'tmatchPassword我可以更改事件记录语言环境消息(“不匹配”),但它会在该语言环境消息的开头和结尾输出密码确认和密码,所以我得到如下内容:"PasswordconfirmationmustmatchPassword"有没有办法将其更改为不同的字符串?PasswordconfirmationandPasswordmustmatch.编辑另一件事是拥有完全自定义的消息,例如:'Setpassword
我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,
我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它
我有一个允许更新用户记录的表单。它包含:password和:password_confirmation字段,但我不希望在数据库中已存储加密密码时对它们运行验证。View文件中的字段:'ConfirmPassword'%>在互联网上搜索时,我发现了这段代码,我认为它是针对以前版本的Ruby/Rails的。(我会把它放在我的用户模型中。)validates_presence_of:password,:on=>create由于我的用户模型中密码验证的语法不同(如下),我对我需要的语法感到困惑。validates:password,:presence=>true,:confirmation=>