In cryptography, PKCS #1 is the first of a family of standards called Public-Key
Cryptography Standards, published by RSA Laboratories. It provides the basic
definitions of and recommendations for implementing the RSA algorithm for
public-key cryptography. It defines the mathematical properties of public and
private keys, primitive operations for encryption and signatures, secure
cryptographic schemes, and related ASN.1 syntax representations.
The current version is 2.2. Compared to 2.1, which was republished as RFC 3447,
version 2.2 updates the list of allowed hashing algorithms to align them with
FIPS 180-4, therefore adding SHA-224, SHA-512/224 and SHA-512/256.
Keys The PKCS #1 standard defines the
mathematical definitions and properties that RSA public and private keys must
have. The traditional key pair is based on a modulus, , that is the product of
two distinct large prime numbers, and , such that .
Starting with version 2.1, this definition was generalized to allow for
multi-prime keys, where the number of distinct primes may be two or more. When
dealing with multi-prime keys, the prime factors are all generally labeled as
for some , such that: for
As a notational convenience, and . The RSA public key is represented as the
tuple , where the integer is the public exponent.
The RSA private key may have two representations. The first compact form
is the tuple , where is the private exponent. The second form has at least
five terms, or more for multi-prime keys. Although mathematically redundant
to the compact form, the additional terms allow for certain computational
optimizations when using the key. Primitives
The standard defines several basic primitives. The primitive operations
provide the fundamental instructions for turning the raw mathematical formulas
into computable algorithms. I2OSP, OS2IP: conversion between the
potentially large nonnegative integers encountered in the mathematical formulas
and their computer data representation as a sequence of bytes.
RSAEP, RSADP: basic encryption and decryption algorithms.
RSASP1, RSAVP1: algorithms for producing and verifying signatures.
Schemes By themselves the primitive operations
do not necessarily provide any security. The concept of a cryptographic scheme is
to define higher level algorithms or uses of the primitives so they achieve
certain security goals. There are two schemes for encryption and
decryption: RSAES-OAEP: improved
encryption/decryption scheme; based on the Optimal Asymmetric Encryption
Padding scheme proposed by Mihir Bellare and Phillip Rogaway.
RSAES-PKCS1-v1_5: older encryption/decryption scheme as first
standardized in version 1.5 of PKCS #1. There are also two schemes for dealing
with signatures: RSASSA-PSS: improved probabilistic
signature scheme with appendix; based on the Probabilistic Signature Scheme
originally invented by Bellare and Rogaway.
RSASSA-PKCS1-v1_5: old signature scheme with appendix as first standardized in
version 1.5 of PKCS #1. The two signature schemes make use of
separately defined encoding methods: EMSA-PSS: encoding method for signature
appendix, probabilistic signature scheme.
EMSA-PKCS1-v1_5: encoding method for signature appendix as first standardized
in version 1.5 of PKCS #1. The signature schemes are actually
signatures with appendix, which means that rather than signing some input data
directly, a hash function is used first to produce an intermediary
representation of the data, and then the result of the hash is signed. This
technique is almost always used with RSA because the amount of data that can be
directly signed is proportional to the size of the keys; which is almost always
much smaller than the amount of data an application may wish to sign.
Version history Versions 1.1–1.3, February through March
1991, privately distributed. Version 1.4, June 1991, published for
NIST/OSI Implementors' Workshop. Version 1.5, November 1993. First public
publication. Republished as RFC 2313. Version 2.0, September 1998. Republished
as RFC 2437. Version 2.1, June 2002. Republished as
RFC 3447. Version 2.2, October 2012.
External links PKCS #1: RSA Cryptography Standard, RSA
Laboratories RFC 3447
Raising the Standard for RSA Signatures: RSA-PSS, Burt Kaliski, RSA Laboratories
February 26, 2003.