zoukankan      html  css  js  c++  java
  • 公钥、私钥与数字签名

    公钥与私钥

    区块链技术的应用和开发,数字加密技术是关键。一旦加密方法遭到破解,区块链的数据安全将受到挑战,区块链的不可篡改性将不复存在。加密算法分为对称加密算法和非对称加密算法,区块链中主要应用非对称加密算法。

    非对称加密指为满足安全性需求和所有权验证需求而集成到区块链中的加密技术。非对称加密通常在加密和解密过程中使用两个非对称的密码,分别称为公钥和私钥。非对称密钥对具有两个特点:

    一是用其中一个密钥加密信息后,只有另一个对应的密钥才能解开。

    二是公钥可向其他人公开,私钥则保密,其他人无法通过该公钥推算出相应的私钥。

    非对称密钥加密系统的主要应用有两个,分别是公钥加密和公钥认证。公钥加密和公钥认证的过程并不一样,下面分别进行简单介绍。

    公钥加密

    加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。

    为了让读者更容易理解什么是公钥加密,先来看一个简单的例子。若有两个用户Jack和Michael,Jack想把一段文字通过公钥加密技术发送给Michael,而Michael有一对公钥和私钥,那么这个加密和解密过程如下:

    Michael将他的公钥发送给Jack。

    Jack就用Michael的公钥对文字进行加密,将加密后的结果发送给Michael。3. Michael用他的私钥解密Jack发送给他的消息。整体过程如图1所示。

    公钥认证

    身份认证与加密不同,主要用于鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。列举一个简单的例子,Michael想让Jack知道自己是真实的Michael,而不是其他人假冒的,整个身份认证的过程如下:

    Michael使用他的私钥对文件进行签名,发送给Jack。

    Jack使用Michael的公钥解密文件,如果解密成功,则证明Michael的私钥是正确的,因而就完成了对Michael的身份鉴别。从而验证签名。

    从上述两个例子可以看出,公钥加密是发送者先用公钥加密,接收者再用私钥解密,而公钥认证则是发送者先用私钥加密,接收者再用公钥解密以验证。


    数字签名

    在区块链的分布式网络里,节点之间进行通讯并达成信任,需要依赖数字签名技术,数字签名涉及到公钥、私钥和钱包等工具,它有两个作用:

    一是证明消息确实是由信息发送方签名并发出来的。

    二是确定消息的完整性。

    数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过。因此数字签名能够验证信息的完整性。

    我们用一个例子来说明,先看上图,发送方把hello kitty的信息进行双重处理:

    1.通过接收方公钥来进行加密得到密文。

    为什么要接收方的公钥来加密? 因为只有接收方的私钥可以解开接受方公钥加过的密,保证只有接受方可以解密。

    2.对hello kitty哈希得到摘要,接着再经过发送方私匙进行签名,签名后得出的数字签名和密文一起发给接受方。

    为什么要用发送方的私钥签名?因为这种方式,才能让接收方确认这条信息是发送方发出来的。只有发送方的公钥才能解开发送方的签名。

    接收方同样对接收到的信息(密文及数字签名)进行以下步骤处理:

    1.用自己的私匙解开密文,得到hello kitty.

    2.对hello kitty哈希得到摘要。

    3.通过发送方的公钥解开发送方签名,得到摘要‚。

    4.对解密密文的摘要�和解密数字签名的摘要‚进行对比,若摘要一致,则可确认信息为发送方所发,及信息的完整性。

    总结

    数字签名是一种能被轻松识别的认证工具,因为验证它的过程本质上只是用计算机解一道数学题而已。所以,眨眼间就可以完成认证过程,不用像人为比对字迹或印章那样耗时费力。

    通过数字签名我们主要实现了:

    1、接收方能通过发送方的公钥认证发送方的身份

    2、通过私钥方式签名,别人伪造不了信息的签名

    3、发送方也通过私钥签名抵赖不了对信息的签名

    4、通过数字摘要技术保证了数据的完整性

    5、哈希函数也保证了数据不可有任何篡改

    明明没有和TA相见,但在比特世界里,数字签名却可以让你见字如面。

  • 相关阅读:
    IDEA——使用JavaScript Debugger调试代码
    CSS——通过CSS实现展示更多选项和收起
    Antd——表单使用自定义正则进行校验
    GitHub——如何切换默认分支
    Taro——安装和使用
    webpack——You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
    SSH——ssh: rejected: administratively prohibited (open failed)
    VUE——三元表达式动态渲染样式
    Windows——80端口被系统占用
    NPM——BASIC realm="Sonatype Nexus
  • 原文地址:https://www.cnblogs.com/chengfengchi/p/11404355.html
Copyright © 2011-2022 走看看