PKCS#1
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的更多相关文章
- JKS和PKCS#12
今天来点实际工作中的硬通货! 与计费系统打交道,少不了用到加密/解密实现.为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺.那么需要通过什么载体传递非对称算法公钥/私钥信息?数字证书是公钥的载 ...
- PKCS#1规范阅读笔记2--------公私钥ASN.1结构
PKCS#1种介绍了哈希算法的OID等的ASN.1结构,因为使用ASN.1的解码工具(比如:ASN1View)时,会自动显示出各OID的含义,所以这里就不说明了.下面就只简单摘抄一下RSA公私钥的AS ...
- X.509,RSA,PKCS 普及
X.509 X.509是一种非常通用的证书格式.所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用. 在一份证书中,必须证明公钥 ...
- PKCS #1 RSA Encryption Version 1.5
PKCS #1 RSA Encryption Version 1.5 在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式 ...
- BouncyCastle产生一个PKCS#12规范的PFX/p12证书
RT,在C#中实现,依赖.netFramework2.0 BouncyCastle中提供了PKCS12Store,Pkcs12StoreBuilder,AsymmetricKeyEntry,X509C ...
- PKCS#12
http://blog.csdn.net/cuiran/article/details/7816696 数字证书介绍 一.什么是数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供 ...
- 使用 PyCrypto 进行 AES/ECB/PKCS#5(7) 加密
东篱 使用 PyCrypto 进行 AES/ECB/PKCS#5(7) 加密 2013/06/05 · tech PyCrypto 是流行的 Python 加密/解密库.但是其 AES 的 ECB 模 ...
- PKCS RSA执行标准
RSA是一种算法,但是,在相关应用的时候,还是需要有一些标准的.这就是pkcs.现在的各种程序中,基本都是遵循这个标准来使用RSA的.最近陆续读取RSA相关的内容进行学习. RSA官网:https:/ ...
- C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出
差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...
- PKCS 15 个标准
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准. 可以到官网上看看 What i ...
随机推荐
- iOS中类、元类、isa详解
类相信大家都知道是什么,如果看过runtime的源码或者看过相关的文章对isa肯定也不陌生,不过元类(meta class)大家可能就比较陌生了.不过大家也不要担心,我会细细道来,让大家明白它到底是个 ...
- [daily][centos][nginx] 在centos7使用nginx启用对文件目录的http访问
1. 安装nginx yum install nginx 2. 修改配置 2.1 提供目录权限: 我需要访问的目录是 /home/data, 用户是data, 所以修改如下配置: [root@S205 ...
- 再探树形dp
随着校oj终于刷进了第一页,可以不用去写那些水题了,开始认真学习自己的东西,当然包括文化课.努力.. 这道题呢是道树形dp,可看到了根本就不知道怎么写思考过程: 5min 终于看懂了题 画了样例的图把 ...
- 最全的MonkeyRunner自动化测试从入门到精通(1)
一.环境变量的配置 1.JDK环境变量的配置 步骤一:在官网上面下载jdk,JDK官网网址: http://www.oracle.com/technetwork/java/javase/downloa ...
- 元素class的增、删、查、toggle
比如有一个元素div <div class="btn user">我是div</div> 之前只知道元素有一个className可以来改动 元素的类名 但 ...
- java读取配置文件的信息
1. 首先,工程结构如下: 注:a. 蓝色标注的两个文件是和com包平级的,都在src下.EnnNotificationPushProxy.ini是这个工程的配置文件,log4j.properties ...
- 8.0-uC/OS-III单任务应用
1.单任务应用 app.c文件: (1).APP_CFG.H 是用于配置的头文件.例如, APP_CFG.H 中包含的#define常量确定了任务优先级,堆栈大小,以及其他特性. BSP.H 是 BS ...
- python-面向对象-13_文件
文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...
- 如何修改帝国cms文章点击量默认值和成倍增加
我们在帝国cms发布完文章,在不点击的情况下,“点击量”默认显示为0,请问有什么方法,修改关注默认值吗?这个可以在增加信息时,“特殊属性”标签里修改点击量,如下图 有朋友问有没其他好的方法快速增加.成 ...
- Java基础知识(JAVA集合框架之List与Set)
List和Set概述数组必须存放同一种元素.StringBuffer必须转换成字符串才能使用,如果想拿出单独的一个元素几乎不可能.数据有很多使用对象存,对象有很多,使用集合存. 集合容器因为内部的数据 ...