How to sign a message with only "n" and "d" fields of RSA-1024 bit private key?

閲覧: 59 回
最初の未読メッセージにスキップ

Gary

未読、
2009/02/28 15:23:102009/02/28
To: Crypto++ Users

Hi there!
I've built the below code(RSASign) successfully and it works fine:

#include "stdafx.h"

#include "rsa.h"
#include "osrng.h" // PRNG
#include "hex.h" // Hex Encoder/Decoder
#include "filters.h" // String Source and Sink
//std
#include <iostream>
#include <conio.h>
using namespace std;
using namespace CryptoPP;
int main()
{

AutoSeededRandomPool rng;
string message = "Yoda said, Do or Do Not. There is not try.";

// Input: Private Key
byte PrivateKeyArray[]=
{0x30,0x82,0x01,0x52,0x02,0x01,0x00,0x30,0x0D,
0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,
0x04,0x82,0x01,0x3C,0x30,0x82,0x01,0x38,0x02,0x01,0x00,0x02,0x41,
0x00,0xD1,0x8A,0x48,0xC0,0x60,0x56,0x27,0x32,0x98,0xE4,0x3F,0xB4,
0x43,0xF2,0xB9,0xF6,0xA2,0x75,0xF0,0x42,0x17,0x07,0xD8,0x4E,0x9C,
0x62,0x29,0x19,0xF6,0xE5,0xFB,0xDA,0x49,0x6E,0x42,0x85,0xB1,0x1A,
0xE3,0x1A,0x1B,0x24,0x7B,0x0F,0xCD,0x5F,0x9E,0x3D,0xC1,0x1C,0x7C,
0x26,0x06,0xA7,0x28,0x88,0xED,0x87,0x2D,0xC7,0xB5,0x2A,0xDB,0x0F,
0x02,0x01,0x11,0x02,0x40,0x49,0xF4,0x92,0x25,0xC7,0xA5,0xEF,0xB7,
0x81,0x41,0x7F,0xE5,0x45,0x28,0x7D,0xDE,0x93,0xB1,0x27,0x9E,0xDA,
0xF3,0xB5,0xC1,0x64,0x5E,0xE1,0x54,0x75,0x42,0x1C,0xA6,0xC1,0x5D,
0x3B,0xCE,0xED,0x85,0x1F,0xE6,0x6B,0xEA,0xB8,0x47,0x5B,0x2C,0x38,
0x06,0xEE,0xC9,0x92,0x9D,0xB3,0x24,0x43,0xD1,0x85,0x6E,0x11,0x9D,
0xF2,0x01,0x68,0x31,0x02,0x21,0x00,0xF7,0x77,0x08,0xF8,0xCE,0xF8,
0x9E,0x98,0x32,0x6C,0x9C,0x7C,0x9B,0x41,0x5F,0xB8,0xEC,0x63,0x8A,
0xEE,0xAC,0xD0,0xA5,0xFC,0x60,0xEC,0x43,0x72,0x80,0xFC,0xE9,0x1F,
0x02,0x21,0x00,0xD8,0xC4,0x65,0x6D,0x41,0x29,0x14,0xCA,0x61,0x9E,
0xD4,0x73,0xAF,0xCB,0x9F,0xC6,0x85,0x7D,0xD1,0xCD,0xDE,0x45,0x17,
0xBA,0xE7,0xE3,0x0D,0xC0,0x5B,0xD4,0xA0,0x11,0x02,0x21,0x00,0xCB,
0xCB,0x70,0xCC,0xE6,0xAE,0xA0,0xB9,0x92,0xF0,0x08,0x66,0x9D,0xF9,
0x9A,0x1F,0xD1,0xBB,0x63,0x5B,0x24,0xE8,0x10,0x39,0x40,0xC2,0x91,
0xE5,0xD3,0xA3,0x1A,0x55,0x02,0x20,0x19,0x80,0x84,0x67,0x34,0xD7,
0xA8,0x17,0xCF,0x3F,0xDC,0xC2,0x50,0xEA,0xC7,0x80,0xC4,0x69,0x27,
0xBD,0xDD,0xEA,0x02,0xCA,0xB1,0xDE,0x7A,0x16,0xA1,0x64,0x4F,0x11,
0x02,0x20,0x1B,0x29,0x5C,0x2F,0x54,0x61,0xED,0x90,0xCA,0x8A,0xB6,
0xE2,0x8E,0x27,0x0C,0x8F,0x00,0x40,0x90,0x78,0xF8,0xDD,0xF1,0xED,
0x9F,0x1B,0x3E,0x46,0x86,0xD3,0x93,0xB6};


// Output: Signed Message M
byte signature[256];


StringSource privArray(PrivateKeyArray,sizeof(PrivateKeyArray),
true,NULL);
RSASSA_PKCS1v15_SHA_Signer priv(privArray);

// Sign Away...
StringSource( message, true,
new SignerFilter( rng, priv,
new HexEncoder(
new ArraySink(signature,sizeof(signature))
) // HexEncoder
) // SignerFilter
); // StringSource

cout<<"signature is:"<<endl;
for(int i=0;i<sizeof(signature);i++)
cout<<signature[i]<<" | ";
_getch();

return 0;
}



It's private key value is in a RSAPrivateKey structure format,as
defined by PKCS#1,
And is of type a DER-encoded PKCS#8 PrivateKeyInfo structure.



I need to sign a message by only "n"(modulus) and "d"(private
exponent),
I've read "RSADumpKeys" example to parse key fields,but I don't know
how can I sign a message with only "n" and "d" parts?
And with which function?

I want to store "n" and "d" parts of generated Private key into a byte
array(with length 256 bytes) and sign a message with this array,

Is this job possible with the above "CryptoPP" functions? or their
input private key should be only in DER-encoded format?

Because now I need to store only 256 bytes(128 bytes for "n" and 128
bytes for "d")!

What is your suggesstion?

Hope you help me!
Thanks in Advance.
Gary

Wei Dai

未読、
2009/02/28 16:23:392009/02/28
To: Gary、Crypto++ Users
It's possible, but you have to know "e" as well. You can use this member
function in InvertibleRSAFunction:

//! factor n given private exponent
void Initialize(const Integer &n, const Integer &e, const Integer &d);

to initialize the private key, then sign the message normally.

--------------------------------------------------
From: "Gary" <b.rost...@gmail.com>
Sent: Saturday, February 28, 2009 12:23 PM
To: "Crypto++ Users" <cryptop...@googlegroups.com>
Subject: How to sign a message with only "n" and "d" fields of RSA-1024 bit
private key?
全員に返信
投稿者に返信
転送
新着メール 0 件