RSA Public Key Encryption

JavaCard Applet Development Related Questions and Answers.
morva14
Posts: 11
Joined: Thu Feb 25, 2016 5:16 pm
Points :188
Contact:

RSA Public Key Encryption

Post by morva14 » Sun May 29, 2016 2:07 pm

Hello
i want to encrypt some bytes for example (11 11 11 11 11) by using RSA Public Key with 2048 bit length , but the result changes ever

byte[] list = new byte[256];

private static Cipher asymCipher;
private static RSAPrivateKey rsaPriKey;
private static RSAPublicKey rsaPubKey;
private static KeyPair keyPair;

public testSignApplet()
{
rsaPriKey = (RSAPrivateKey)KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PRIVATE,KeyBuilder.LENGTH_RSA_2048,false);
rsaPubKey = (RSAPublicKey)KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PUBLIC,KeyBuilder.LENGTH_RSA_2048,false);
keyPair = new KeyPair(rsaPubKey,rsaPriKey);
asymCipher = Cipher.getInstance(Cipher.ALG_RSA_PKCS1,false);
}

switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x0C:
keyPair.genKeyPair();;


case (byte)0x3C:
asymCipher.init(rsaPubKey,Cipher.MODE_ENCRYPT);
break;
case (byte)0x4C:

apdu.setIncomingAndReceive();
asymCipher.doFinal(buf,(short)ISO7816.OFFSET_CDATA,lc,list,(short)0);
apdu.setOutgoing();
apdu.setOutgoingLength((short)256);
apdu.sendBytesLong(list,(short)0,(short)list.length);
break;
}

User avatar
UNKNwYSHSA
Posts: 630
Joined: Thu May 21, 2015 4:05 am
Points :3037
Contact:

Re: RSA Public Key Encryption

Post by UNKNwYSHSA » Sun May 29, 2016 9:49 pm

ALG_RSA_PKCS1
public static final byte ALG_RSA_PKCS1Cipher algorithm ALG_RSA_PKCS1 provides a cipher using RSA, and pads input data according to the PKCS#1 (v1.5) scheme.
Note:

This algorithm is only suitable for messages of limited length. The total number of input bytes processed during encryption may not be more than k-11, where k is the RSA key's modulus size in bytes.
The encryption block(EB) during encryption with a Public key is built as follows:
EB = 00 || 02 || PS || 00 || M
:: M (input bytes) is the plaintext message
:: PS is an octet string of length k-3-||M|| of pseudo random nonzero octets. The length of PS must be at least 8 octets.
:: k is the RSA modulus size.

The encryption block(EB) during encryption with a Private key (used to compute signatures when the message digest is computed off-card) is built as follows:
EB = 00 || 01 || PS || 00 || D
:: D (input bytes) is the DER encoding of the hash computed elsewhere with an algorithm ID prepended if appropriate
:: PS is an octet string of length k-3-||D|| with value FF. The length of PS must be at least 8 octets.
:: k is the RSA modulus size.


This is the description of ALG_RSA_PKCS1 in the specification JavaCard API.
The padding bytes contains random bytes. This leads different result in each encryption.
sense and simplicity

morva14
Posts: 11
Joined: Thu Feb 25, 2016 5:16 pm
Points :188
Contact:

Re: RSA Public Key Encryption

Post by morva14 » Mon May 30, 2016 5:55 am

tanks so much.
what is your solution for this problem?
i dont no what should i do

User avatar
UNKNwYSHSA
Posts: 630
Joined: Thu May 21, 2015 4:05 am
Points :3037
Contact:

Re: RSA Public Key Encryption

Post by UNKNwYSHSA » Mon May 30, 2016 9:57 pm

Decrypt the encrypted data with the private key. The output is your plain text.

case 0xXX:
// Init cipher with the private key and mode decrypt;
asymCipher.init(rsaPriKey,Cipher.MODE_DECRYPT);
// Input encrypted data and output the plain data;
apdu.setIncomingAndReceive();
short plainLen = asymCipher.doFinal(buf,(short)ISO7816.OFFSET_CDATA,lc,list,(short)0);
apdu.setOutgoing();
apdu.setOutgoingLength((short)plainLen);
apdu.sendBytesLong(list,(short)0,plainLen);
break;


Here is the whole process of PKCS1 encryption and decryption (Encrypt with public key):
1 Encryption:
    A Input plain text;
    B Padding plain text: (00 || 02 || PS || 00 || Plain text); (PS is pseudo random nonzero octets);
    C Encrypt padded data;
    D Output encrypted data;
2 Decryption:
    A Input encrypted data;
    B Decrypt encrypted data => Output padded plain data;
    C Unpadding the (padded plain data) with PKCS1: (00 || 02 || PS || 00 || Plain text) => Plain text; (PS is pseudo random nonzero octets);
    D OUtput plain text;
sense and simplicity

morva14
Posts: 11
Joined: Thu Feb 25, 2016 5:16 pm
Points :188
Contact:

Re: RSA Public Key Encryption

Post by morva14 » Wed Jun 08, 2016 4:56 am

deer UNKNwYSHSA thanks.

User avatar
UNKNwYSHSA
Posts: 630
Joined: Thu May 21, 2015 4:05 am
Points :3037
Contact:

Re: RSA Public Key Encryption

Post by UNKNwYSHSA » Wed Jun 08, 2016 5:32 am

:D
sense and simplicity

Post Reply Previous topicNext topic

Who is online

Users browsing this forum: No registered users and 15 guests

JavaCard OS : Disclaimer