Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Keys  





2 Primitives  





3 Schemes  





4 Version history  





5 Implementations  





6 Attacks  





7 See also  





8 References  





9 External links  














PKCS 1: Difference between revisions






Čeština
Deutsch
Português
 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




Print/export  



















Appearance
   

 





Help
 

From Wikipedia, the free encyclopedia
 


Browse history interactively
 Previous editNext edit 
Content deleted Content added
Hoylen (talk | contribs)
139 edits
m Expanded out names of the primitives
Line 24: Line 24:

The standard defines several basic primitives. The primitive operations provide the fundamental instructions for turning the raw mathematical formulas into computable algorithms.

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 non-negative integers encountered in the mathematical formulas and their computer data representation as a sequence of bytes (an [[Octet (computing)|octet string]])

* I2OSP - Integer to Octet String Primitive - Converts a (potentially very large) non-negative integer into a sequence of bytes (octet string).

* OS2IP - Octet String to Integer Primitive - Interprets a sequence of bytes as a non-negative integer

* RSAEP, RSADP: basic encryption and decryption algorithms.

* RSAEP - RSA Encryption Primitive - Encrypts a message using a public key

* RSASP1, RSAVP1: algorithms for producing and verifying signatures.

* RSADP - RSA Decryption Primitive - Decrypts ciphertext using a private key

* RSASP1 - RSA Signature Primitive 1 - Creates a signature over a message using a private key

* RSAVP1 - RSA Verification Primitive 1 - Verifies a signature is for a message using a public key



==Schemes==

==Schemes==


Revision as of 10:25, 20 December 2019

Incryptography, PKCS #1 is the first of a family of standards called Public-Key Cryptography Standards (PKCS), 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 (2012-10-27). Compared to 2.1 (2002-06-14), 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 (p, q, dp, dq, qinv), 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. In particular, the second format allows to derive the public key.[1]

Primitives

The standard defines several basic primitives. The primitive operations provide the fundamental instructions for turning the raw mathematical formulas into computable algorithms.

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:

There are also two schemes for dealing with signatures:

The two signature schemes make use of separately defined encoding methods:

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

Implementations

Below is a list of cryptography libraries that provide support for PKCS#1:

Attacks

Multiple attacks were discovered against PKCS #1 v1.5.[2][3]

In 1998, Daniel Bleichenbacher published a seminal paper on what became known as Bleichenbacher's attack (also known as "million message attack").[3][4] PKCS #1 was subsequently updated in the release 2.0 and patches were issued to users wishing to continue using the old version of the standard.[2] With slight variations this vulnerability still exists in many modern servers.[5]

In 2006, Bleichenbacher presented a new forgery attack against the signature scheme RSASSA-PKCS1-v1_5.[6]

See also

References

  1. ^ Ilmari Karonen (27 October 2017). "Can I get a public key from an RSA private key?". Stack Exchange.
  • ^ a b Jean-Sébastien Coron, Marc Joye, David Naccache, and Pascal Paillier (2000). "New Attacks on PKCS #1 v1.5 Encryption" (PDF). EUROCRYPT. pp. 369–381.{{cite web}}: CS1 maint: multiple names: authors list (link)
  • ^ a b Romain Bardou, Riccardo Focardi, Yusuke Kawamoto, Lorenzo Simionato, Graham Steel, et al.. Efficient Padding Oracle Attacks on Cryptographic Hardware. [Research Report] RR-7944, INRIA. 2012, pp.19. ⟨hal-00691958v3⟩
  • ^ RFC3218 – Preventing the Million Message Attack on Cryptographic Message Syntax, January 2002.
  • ^ Hanno Böck; Juraj Somorovsky; Craig Young. "ROBOT attack". Retrieved February 27, 2018.
  • ^ Analysis on Bleichenbacher's Forgery Attack. IEEE. 2007.
  • External links


    Retrieved from "https://en.wikipedia.org/w/index.php?title=PKCS_1&oldid=931663386"

    Categories: 
    Cryptography standards
    Digital signature schemes
    Digital Signature Standard
    Hidden categories: 
    CS1 maint: multiple names: authors list
    Restricted titles (non-leading number sign)
    Articles needing additional references from March 2019
    All articles needing additional references
     



    This page was last edited on 20 December 2019, at 10:25 (UTC).

    This version of the page has been revised. Besides normal editing, the reason for revision may have been that this version contains factual inaccuracies, vandalism, or material not compatible with the Creative Commons Attribution-ShareAlike License.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki