ASN.1 syntax,octet string是一个8 bytes sequence string.

RSA中涉及到的Data conversion:

  1)I2OSP,Integer to Octet String(8bytes sequence);

    Input:   x nonnegative integer to be converted

        xLen intended length of resulting octet string

    Output:X corrsponding octet string of length xLen

  2)OS2IP,octet string to a nonnegative integer,

    Input:X octet string to be converted

    Output:x corresponding nonnegative integer

Encryption和decryption primitives:

  1)RSAEP( (n,e), m), Input       (n,e) RSA public key

                   m  message,integer 0 - n-1

            Output    c   ciphertext

    c = m^e mod n

  2)RSADP(K, c),  Input  K   RSA private key,    a  pair (n,d)

                       a  quintuple(p, q, dp, dq, qinv)

             c   ciphertext,integer 0 - n-1

           Output  m  message,integer 0 - n-1

    m = c^d mod n

   或者:

        

Signature和Verification privimitives:

  1)RSASP1(K, m),  Input  K  RSA private key,  a  pair (n, d)

                          a  quintuple(p, q, dp, dq, qinv)

              m  mesage,integer 0 - n-1

            Output s   signature,integer 0 - n-1

    s = m^d mod n

    或者:

    

  2)RSAVP1 ( (n,e), s)   Input  (n,e)  RSA public key

                 s   signature,integer 0 - n-1

            Output  m  message, integer 0 - n-1

    m = s^e mod n

RSASA-PSS的签名流程:1)EMSA-PSS encoding, EM = EMSA-PSS-encode(M, modbits -1)

              产生的EM的长度,经过取8mod向上取整,还是n;

            2)RSA signature, m = OS2IP (EM)

                      s = RSASP1 (K, m)

                      S = I2OSP (s, k)

              产生的签名的长度一定是n;

RSASA-PKCS1-v1_5的签名流程:1) EM = EMSA-PKCS1-v1_5 (M, k),k的大小为n的长度;

                2) RSA signature,m = OS2IP (EM);

                          s = RSASP1 (K, m);

                          S = I2OSP (s, k);

                  产生的签名的长度一定是n;

PKCS#1-V-1.5的signature encode方式:EMSA-PKCS1-v1_5-Encode (M, emlen)

  输入:

    1) Hash function;hLen表示hash function output;

    2) Message;

    3) emlen,最少tLen+11,tLen表示对T进行DER之后的值的长度;

  输出:

    1) EM,encoded message;

    2) Error,“message too long”, encoded message length too short;

流程:

  1)进行hash运算; H = Hash(m);

  2)将hash function和hash value进行ASN.1的DER编码,输出T,T的长度为tLen;

  3)如果emLen < tLen + 11,输出error信息;

  4)产生一个PS的字符串,以FF为最后一个有效字符;最少8个byte

  5)将数据拼接起来,组成EM;

    

  几种hash算法的T的值:

    

  SHA-1的T的长度:120+160 = 280

  SHA-224、SHA-512/224的T的长度:154+224 = 378

  SHA-256、SHA-512/256的T的长度:154+256 = 410

  SHA-384的T的长度:154+384 = 538

  SHA-512的T的长度:154+512 = 666

 PKCS#1 PSS sign encode(M, embits)  options:  Hash function,hLen表示hash function的输出octets的长度;

                     MGF mask generation function;

                     sLen,length in octets of the salt;

                   Input:M  message to be encoded;

                       embits  8hLen + 8sLen + 9 < embits < EM的长度;

                   Output:EM,encoded message;EMLen = embits/8向上取整;

  流程:1) mHash = Hash(M),hLen的长度;

     2) emLen < hLen + sLen + 2,直接报错;

       3) 产生随机数sLen长度的salt,sLen为0时,salt为空字符串;

       4) M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt,M'的长度为8+hLen+sLen

       5) H = Hash(m'),长度hLen;

       6) 产生字符串 PS,emLen - sLen -hLen -2个字符;

       7) DB = PS || 0x01 || salt,DB的长度为emLen - hLen -1;

       8) dbmask = MGF(H, emLen-hLen-1)

       9) maskDB = DB^+dbmask;

      10) 设置maskedDB的最左边的8emLen - emBits个字符为零;

      11) EM = maskDB || H || 0xbc;

      

  MGF function:对输入的数据进行hash压缩或扩展;

    MGF1(mgfseed, maskLen)   Options     Hash

                   Input: mgfseed,seed from which mask is generated;

                        maskLen,输出mask的长度,最大2^32hLen;

                   Output:mask,输出mask;

    流程:

    1)首先判断maskLen < 2^32hLen;否则报错;

    2)T清空;

    3)counter 从0 到 maskLen/hLen -1 做hash运算和拼接操作;

      C = I2OSP (counter, 4),   C一共是32byte;

      T = T || Hash(mgfSeed || C)

验签与签名的流程,完全相反,

加解密的流程,padding方式与sign/verify不同,

PKCS#1的更多相关文章

  1. JKS和PKCS#12

    今天来点实际工作中的硬通货! 与计费系统打交道,少不了用到加密/解密实现.为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺.那么需要通过什么载体传递非对称算法公钥/私钥信息?数字证书是公钥的载 ...

  2. PKCS#1规范阅读笔记2--------公私钥ASN.1结构

    PKCS#1种介绍了哈希算法的OID等的ASN.1结构,因为使用ASN.1的解码工具(比如:ASN1View)时,会自动显示出各OID的含义,所以这里就不说明了.下面就只简单摘抄一下RSA公私钥的AS ...

  3. X.509,RSA,PKCS 普及

    X.509 X.509是一种非常通用的证书格式.所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用. 在一份证书中,必须证明公钥 ...

  4. PKCS #1 RSA Encryption Version 1.5

    PKCS #1  RSA Encryption Version 1.5 在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式 ...

  5. BouncyCastle产生一个PKCS#12规范的PFX/p12证书

    RT,在C#中实现,依赖.netFramework2.0 BouncyCastle中提供了PKCS12Store,Pkcs12StoreBuilder,AsymmetricKeyEntry,X509C ...

  6. PKCS#12

    http://blog.csdn.net/cuiran/article/details/7816696 数字证书介绍 一.什么是数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供 ...

  7. 使用 PyCrypto 进行 AES/ECB/PKCS#5(7) 加密

    东篱 使用 PyCrypto 进行 AES/ECB/PKCS#5(7) 加密 2013/06/05 · tech PyCrypto 是流行的 Python 加密/解密库.但是其 AES 的 ECB 模 ...

  8. PKCS RSA执行标准

    RSA是一种算法,但是,在相关应用的时候,还是需要有一些标准的.这就是pkcs.现在的各种程序中,基本都是遵循这个标准来使用RSA的.最近陆续读取RSA相关的内容进行学习. RSA官网:https:/ ...

  9. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出

    差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...

  10. PKCS 15 个标准

    PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准. 可以到官网上看看 What i ...

随机推荐

  1. LeetCode 824 Goat Latin 解题报告

    题目要求 A sentence S is given, composed of words separated by spaces. Each word consists of lowercase a ...

  2. mysql存储引擎的简介

    前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...

  3. css样式重置样式

    html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, ci ...

  4. 洛谷 P3521 ROT-Tree Rotations [POI2011] 线段树

    正解:线段树合并 解题报告: 传送门! 今天学了下线段树合并,,,感觉线段树相关的应用什么的还是挺有趣的,今天晚上可能会整理一下QAQ? 然后直接看这道题 现在考虑对一个节点nw,现在已经分别处理出它 ...

  5. linux 内核启动流程分析,移植

    分析 linux-2.6.22.6 内核启动流程 移植 linux-3.4.2 到 JZ2440 开发板 Linux内核源码百度云链接: https://pan.baidu.com/s/1m1ymGl ...

  6. ubuntu编译opencv3.1遇到的问题

    网上有很多关于编译的具体步骤,我也是按照网上的说明一步步操作的,这里主要想记录的是在安装完之后,import cv2不存在以及其他的libopencv_hdf.so.3.1等找不到的问题,如果将这样的 ...

  7. vue启动调试、启动编译的批处理

    Rundev.bat cd %~dp0npm run dev RunBuild.bat cd %~dp0npm run build

  8. weixin.com的whois信息变更为腾讯了 是准备替换weixin.qq.com吗?

    微信双拼域名weixin.com的whois信息变更,所有人为腾讯.从weixin.com在10月18日这次的whois变更上,透露出腾讯似乎准备启用这个域名.如果启用,毋庸置疑是要应用在腾讯的巨无霸 ...

  9. LATCH_EX

    Description: This wait type occurs when a thread is waiting for access to a non-page data structure ...

  10. 轻松了解JS中this的指向

    JS中的this指向一直是个让人头疼的问题,想当初我学的是天昏地暗,查了好多资料,看的头都大了,跟他大战了那么多回合,终于把它搞定个七八分,其实往往都是我们复杂化了,现在就让大家轻松看懂this的指向 ...