¡Ü ÀÚ¹Ù¿¡¼ Private / Public Key ÆÄÀÏ »ý¼ºÇϱâ
ÀÚ¹Ù¿¡¼´Â key pair ¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Â ¾ÏÈ£È API(rich cryptography API)¸¦ Á¦°øÇÑ´Ù.
¾Æ·¡ ¼Ò½º´Â API ¸¦ ÅëÇØ key pair ¸¦ »ý¼ºÇÏ°í ÆÄÀϽýºÅÛ¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â immutable Ŭ·¡½º ¼Ò½ºÀÌ´Ù.
¡Ü RSAKeyPair Class
openssl ¸í·É°ú ¸Å¿ì À¯»çÇÏ´Ù.
»ý¼ºÀÚ¿¡¼ Å° ±æÀÌ(bit)¸¦ ÀÎÀÚ·Î ¹Þ¾Æ RSA private / public key ¸¦ ¸¸µé¾î³½ ÈÄ,
ÁöÁ¤ÇÑ ÆÄÀÏ°æ·Î¿Í ÆÄÀϸíÀ¸·Î ÆÄÀϽýºÅÛ¿¡ ÀúÀåÇÑ´Ù.
¾Æ·¡´Â »ç¿ë¹ýÀÌ´Ù (JUnit Test)
¡Ü RSAKeyPairTest Class
¡Ü Public / Private Å°¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅÍ ¾ÏÈ£È / º¹È£È Çϱâ
ÀÌÁ¦ ÆÄÀÏ·Î »ý¼ºµÈ Public / Private Å°¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅÍ ¾Ïº¹È£È ÇÒ ¼ö ÀÖ´Ù.
RSACipher Ŭ·¡½º¿¡¼ ¾Ïº¹È£È¸¦ ¼öÇàÇÑ´Ù.
¡Ü RSACipher Class
transformation Àº cipher ¸¦ À¯ÀÏÇÏ°Ô ¸¸µé¾îÁÖ´Â ¹®ÀÚ¿ÀÌ´Ù.
´ëĪ/ºñ´ëĪ ¾Ë°í¸®µë »Ó¸¸ ¾Æ´Ï¶ó mode ¿Í padding µµ ÁöÁ¤ÇÏ¿© Cipher ¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù.
¡Ü JDK javax.crypto.Cipher SDK References ¿¡¼ ¹ßÃé
transformation Àº ¾Æ·¡¿Í °°Àº ÇüÅÂÀÌ´Ù.
"algorithm/mode/padding" or
"algorithm"
ÈÄÀÚÀÇ °æ¿ì, mode ¿Í padding Àº provider ±âº»°ªÀÌ »ç¿ëµÈ´Ù.
¾Æ·¡¿Í °°ÀÌ Cipher ¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
JDK ¿¡´Â algorithm, mode, padding ÀÌ Á¤ÀÇµÈ ¸î°¡Áö transformation À» Á¦°øÇÑ´Ù.
¡Ü JDK javax.crypto.Cipher SDK References ¿¡¼ ¹ßÃé
Ç¥ÁØ Cipher transformations, °ýÈ£ ¾ÈÀº Å° »çÀÌÁî
AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
cipher ¿¡¼ mode ¿Í padding ¿¡ ´ëÇØ À̾߱â ÇÒ °ÍÀº ¸¹Áö¸¸,
Ưº°È÷ µÎ°¡Áö °üÁ¡¸¸ »ìÆ캸°Ú´Ù.
ù°·Î RSA ¾Ë°í¸®µë¿¡ ECB mode °¡ ÁöÁ¤µÇ¾î ÀÖÁö¸¸, ÀÚ¹Ù¿¡¼´Â ¹«½ÃµÉ °ÍÀÌ´Ù.
¿Ö³ÄÇϸé, ´Ù¸¥ ºí·°¸ðµå°¡ µ¿ÀÛÇÏ´Â ¹æ½Ä°ú ¸¶Âù°¡Áö·Î ECB(Electronic codebook)µµ ´ëĪ ¾Ïȣȿ¡¼¸¸ »ç¿ëµÈ´Ù.
ÀϹÝÀûÀ¸·Î RSA ¿Í public-key ¾Ïȣȴ ºñ´ëĪÀÌ°í, ºí·° ´ÜÀ§·Î ¾ÏÈ£ÈÇÏÁö ¾Ê´Â´Ù.
ÀÌ·± ÀÌÀ¯·Î Bouncy Castle °ú °°Àº ´Ù¸¥ ¾ÏÈ£È ÇÁ·Î¹ÙÀÌ´õµéÀº RSA ¾Ë°í¸®µëÀ» »ç¿ëÇÏ´Â °æ¿ì mode ·Î "NONE" À» »ç¿ëÇÑ´Ù.
µÑ°·Î padding À» ¾Ë¾Æº¸ÀÚ.
padding ¾øÀÌ RSA ¸¦ »ç¿ëÇÏ´Â °ÍÀº °ø°Ý¿¡ Ãë¾àÇϹǷΠÀý´ë »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.
java ¾ÏÈ£È API ¿¡¼´Â ÀÌ·± ¼³Á¤ÀÌ °¡´ÉÇÏÁö ¾ÊÀ¸´Ï ½Å°æ¾²Áö ¸»ÀÚ.
¡Ü RSACipherTest Class
¡Ü Public / Private Å°¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅÍ ¾ÏÈ£È / º¹È£È Çϱâ (In-memory)
¾à°£¸¸ ¼öÁ¤ÇÏ¸é ¸Þ¸ð¸® ³»¿¡ ÀÖ´Â Public / Private Å°¸¦ »ç¿ëÇÏ¿© ¾Ïº¹È£È ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
publicKeyPath, privateKeyPath ¹®ÀÚ¿ ´ë½Å »ç¿ëÇÒ PublicKey, PrivateKey ¸¦ ÀÎÀÚ·Î ¹Þ´Â
2°³ÀÇ ¿À¹ö·Îµå(overloaded)µÈ ¸Þ¼µå°¡ RSACipher ¿¡ Ãß°¡µÇ¾ú´Ù.
¡Ü RSACipher Class
¾Æ·¡´Â »ç¿ë¹ýÀÌ´Ù. (JUnit Test)
RSACipherTest Ŭ·¡½º¿¡ testEncryptDecryptWithKeyPair() ¸Þ¼µå°¡ Ãß°¡µÇ¾ú´Ù.
¡Ü RSACipherTest Class
|