zoukankan      html  css  js  c++  java
  • 数字签名

    数字签名的机制非常简单,下面两图分别描述了数字签名的一般模型和签名过程的简单描述

    ElGamal数字签名方案

      和ElGamal加密方案一样,ElGamal数字签名方案的基本元素是素数q和α,其中α是q的本原根。

      用户A首先生成公钥/私钥对:

        1、生成随机整数XA,使得1 < XA < q - 1

        2、计算YA = αXA mod q

        3、A的私钥是XA;A的公钥是{q , α , YA}

      用户A对消息M进行签名:

        1、用Hash算法计算消息M的Hash值 m = H(M)  ,1 ≤ m ≤ q-1

        2、随机选择整数K,K满足1 ≤ K ≤ q-1,由于q是素数因此K与q必然互素

        3、计算 S1 = αK mod q 和 S2 = K-1(m - XAS1) mod (q - 1)         ,K-1是 K 模q - 1的逆

        4、签名包括(S1 , S2)对

      

      任何一个用户B都可以通过以下步骤验证签名:

        1、计算V1 = αm mod q

        2、计算V2 = (YA)s1 (S1)S2 mod q

        3、如果V1 = V2,则签名合法

      证明:

        αm mod q =  (YA)s1 (S1)S2 mod q

        αm mod q = αXAS1 αKS2 mod q

        αm-XAS1 mod q = αKS2 mod q

          m - XAS1 ≡ KK-1(m - XAS1) mod (q - 1)  //本原根的性质

    Schnorr数字签名方案

      Schnorr方案的改进在于将生成签名所需的消息计算量最小化,它将生成签名的主要工作不依赖于消息,以便在处理器空闲时执行。

      

      用户A首先生成公钥/私钥对:

        1、选择素数p和q,使得q是p-1的素因子

        2、选择整数α,使得αq = 1 mod p。p , q , α 是公开参数。

        3、选择随机整数s,0 < s < q,计算 v =  α-s mod p

        4、A的私钥是s;A的公钥是v 

      用户A对消息M进行签名:  

        1、随机选择整数r,1 ≤ r ≤ q-1,并计算 x = αr mod p。该过程与待签名消息M无关,可以预处理。

        2、将x附在消息后面一起计算Hash值e:e = H(M || x)

        3、计算 y = (r + se) mod q。

        4、签名包括(e , y)对

      

      任何一个用户B都可以通过以下步骤验证签名:

        1、计算x'= αyve mod p

        2、计算e = H(M || x')

      

      证明:

        x' ≡ αyve ≡ αyα-se ≡ αy-se ≡ αr ≡ x  (mod p)

    DSS算法      Digital Signature Services

      DSS与RSA不同,它是一种只提供数字签名功能的公钥密码算法,不能用于加密或密钥交换。

      

      

  • 相关阅读:
    显示所有用户,mysql的基本操作
    创建用户的方法 3种mysql创建方法
    mysql在win系统dos 安装版配置步骤详解
    Docker学习(二) 数据卷(Volume)的使用
    Docker学习-私有仓库docker-registry的使用
    php 调用curl_init失败
    ubuntu 远程 window
    ubuntu 16.04服务器安装apache2 + php + mysql
    Git 的简单使用及ssh配置问题-赖大大
    python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大
  • 原文地址:https://www.cnblogs.com/block2016/p/5637953.html
Copyright © 2011-2022 走看看