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. vue的生命周期(lifecycle)

    这边转载一篇文章,个人认为写的不错,代码举了个例子很生动. https://segmentfault.com/a/1190000010336178

  2. vue脚手架 构建豆瓣App 第一天

    课堂笔记: 项目结构分析: 项目入口:index.html(div#app) 全局vue组件:App.vue(template:div#app) 通过相同id的div,index.html与Appvu ...

  3. win 右键菜单栏出现sublime打开方式

    win + r 输入 regedit 看图操作

  4. c语言数组应用

    #include <stdio.h> #define SIZE 5 int main(void) { int sum[3]={0},sum2[SIZE]={0},i,sum1=0; dou ...

  5. 【雅思】【写作】【大作文】Report

    •Report •主要分类 •两个问题 • •1. 原因,解决办法 • •2. 原因,积极还是消极 • •3. Freestyle •报告型 •In cities and towns all over ...

  6. Object类(API文档)

    java.lang Class Object java.lang.Object public class Object Class Object is the root of the class hi ...

  7. PHP的类,abstract类,interface及关键字extends和implements

    原文:https://blog.csdn.net/qq_19557947/article/details/77880757?locationNum=4&fps=1 PHP类 PHP类是单继承, ...

  8. C 字符及ASCII值

    .已知字母A的ASCII码为十进制的65,下面程序的输出是___A___. main() { char ch1,ch2; ch1='; ch2='; printf("%d,%c\n" ...

  9. Spark SQL内置函数

    Spark SQL内置函数官网API:http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.fun ...

  10. 【Python】-NO.98.Note.3.Python -【Python3 解释器、运算符】

    1.0.0 Summary Tittle:[Python]-NO.98.Note.3.Python -[Python3 解释器] Style:Python Series:Python Since:20 ...