¾Ïȣȭ ÇÁ·Î±×·¡¹Ö(Cryptography Programming)

±Çµµ±Õ
´ëÀü ±¤¿ª½Ã À¯¼º±¸ °¡Á¤µ¿ 34
µ¥ÀÌÄÞ ¿¬±¸¼Ò ÀüÀÚÁöºÒ ÇÁ·ÎÅäÄÝ ¿¬±¸ÆÀ
E-mail : dgguen@madang.dacom.co.kr
URL : http://madang.dacom.co.kr/dgguen/
Abstract:
ÀÎÅͳݻ󿡼­ÀÇ º¸¾ÈÀ» È®º¸ÇÏ´Â ±æ°¡¿îµ¥ Á¤º¸¸¦ ¾ÏÈ£È­ÇØ¼­ º¸¾ÈÀ» È®º¸ÇÏ´Â ¹æ¹ýÀÌ Á¡ Á¡ Áß¿äÇÑ ¿ä¼Ò·Î ºÎ°¢µÇ°í ÀÖ´Ù. WWWº¸¾È(WWW Security)ÇÁ·ÎÅäÄÝ, ÀüÀÚ¿ìÆíº¸¾È (PGP, PEM, S/MIME), ³×Æ®¿÷·¹À̾¾È(Ipsec, SSL, GSSAPI)µî ¾Ïȣȭ¸¦ ÀÀ¿ëÇÑ º¸¾ÈÀÀ¿ë½Ã½º ÆÀµé ÀÌ ¸¹ÀÌ µîÀåÇϰí ÀÖ´Ù. ÀÌ·± ¸ðµç ¾ÏȣȭÀÀ¿ë½Ã½ºÆÀ¿¡´Â ±âº»ÀûÀÎ ¾Ïȣȭ ÇÁ·Î±×·¡ ¹Ö±â¹ýÀÌ °øÅëÀûÀ¸·Î »ç¿ëµÇ°í ÀÖ´Ù. ÀÌ·± ¾ÏȣȭÀÀ¿ë½Ã½ºÆÀÀ» ¸¸µé±âÀ§ÇÑ °øÅëÀûÀÎ ±â¼úÀÎ ¾ÏȣȭÇÁ·Î±× ·¡¹ÖÀ» ¼³¸íÇÑ´Ù.

Keywords:
Cryptography, programming, RSA, DES, Signature

¸ñÂ÷

1. ¼­·Ð- ¹æÈ­º®À¸·Î ÇØ°áÇÒ¼ö ¾ø´Â ¼û¹Ù²ÀÁú
1.1 Internet Attack
1.2 ¹æÁö¹ý
1.3 ¾Ïȣȭ ½Ã½ºÆÀ
2. ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀ
2.1 Transport Layer Security : IPSec, SSL, GSSAPI, PCT
2.2 Secure-Mail
2.3 Secure-Shell(SSH)
2.4 WWW Security
2.5 Secure-Phone
2.6 Desktop-Security Tool
3. ¾Ïȣȭ °³³ä
3.1 Symmetric Cryptography
3.2 Asymmetric Cryptography
3.3 Message Diegest
3.4 Digital Signature
3.5 ¾Ïȣȭ ¾Ë°í¸®Áò°ú ŰÀÌ ±æÀÌ
4. ¾Ïȣȭ ¶óÀ̺귯¸®
4.1 RSAEURO/RSAREF
4.2 Microsoft CryptAPI
4.3 SSLeay
4.4 PGP
4.5 JAVA Crypto
5. ¾Ïȣȭ ÇÁ·Î±×·¡¹Ö - RSAEURO/RSAREFÁß½ÉÀ¸·Î
5.1 Symmetric Cryptography Programming
5.2 Asymmetric Cryptography Programming
5.3 Message Digest Programming
5.4 Digital Signature Programming
5.5 High Level API
5.6 ¾Ïȣȭ ÇÁ·ÎÅäÄÝ
5.7 ±âŸ °í·ÁÇÒ Á¡
6. °á·Ð

 

1. ¼­·Ð- ¹æÈ­º®À¸·Î ÇØ°áÇÒ¼ö ¾ø´Â ¼û¹Ù²ÀÁú

ÄÄÇ»ÅÍ º¸¾ÈÀº µÎ°¡Áö ¹æÇâ¿¡¼­ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ½Ã½ºÆÀº¸¾È°ú ÀÚ·áÀÇ º¸¾ÈÀÌ´Ù. ±×·¯³ª ½ÇÁ¦·Î ÄÄÇ»ÅÍ º¸¾ÈÀ» »ý°¢ÇÒ¶§ ±à±¹ÀûÀ¸·Î´Â ÀÚ·áÀÇ º¸¾ÈÀ» ¸ñÀûÀ¸·Î ÇÏ´Â °æ¿ì°¡ ¸¹´Ù. Áï ½Ã½ºÆÀº¸¾È ¿ª½Ã ½Ã½ºÆÀÀÚü, Áï µð½ºÅ©, ¿ÀÆÛ·¹ÀÌÆÃ½Ã½ºÆÀµîÀÇ ÆÄ±«¸¦ ¹æÁöÇÏ´Â ÀϺ¸´Ù ´Â ½ÇÁ¦·Î ±× ½Ã½ºÆÀ ³»ºÎ¿¡ ÀÖ´Â Á¤º¸ ȤÀº ÀÚ·á°¡ ´©¼³µÇÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ ÁÖµÈ ¸ñÀû ÀÌ µÇ°í ÀÖ´Ù. ¿À´Ã³¯¿¡´Â ¹é¾÷±â¼úÀÇ ¹ß´Þ, ÄÄÇ»ÅÍ Çϵå¿þ¾îµîÀÇ ¹ß´Þ·Î ½Ã½ºÆÀÀÚüº¸´Ù´Â ±× ¼Ó¿¡ µé¾îÀÖ´Â Á¤º¸°¡ ´õ ºñ ½Î±â ¶§¹®ÀÏ °ÍÀÌ´Ù.
ÀÏ¿¹·Î 96³â 9¿ù¿¡ ¹àÇôÁø ¹Ì±¹CIAÀÇ À¯·´¿¬ÇÕÁ¤ºÎ ÄÄÇ»ÅͽýºÆÀ ÇØÅ·»ç°ÇÀº Àü¼¼°èÀû À¸·Î ³í ¶õÀÌ µÇ´Â ÄÄÇ»Åͺ¸¾ÈÀÇ Á߿伺À» ´Ù½Ã Çѹø Àϱú¿öÁÖ´Â »ç°ÇÀ̶ó ÇϰڴÙ. ¹Ì±¹Àº À¯·´Á¤ºÎÀÇ ÄÄÇ»Å͸¦ ÇØÅ·ÇØ¼­ ¾òÀº Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î À¯·´°úÀÇ Åë»óÇù»ó¿¡¼­ À¯¸®ÇÑ À§Ä¡ ¸¦ È®º¸ÇßÀ¸¸ç ÃÖ ±ÙÀÇ Åë»óÇù»ó¿¡¼­ ¸¹Àº °ÍÀ» ¾ò¾ú´Ù°í ÇÑ´Ù.

±¹³»¿¡´Â º¸¾ÈÇÏ¸é ¹æÈ­º®(Firewall)À» ÃÖ´ëÀÇ ÇØ°áÃ¥À̶ó°í »ý°¢ÇÏ´Â °æÇâÀÌ ÀÖ´Ù. ±×·¯ ³ª ¹æ È­º®(firewall)Àº °¡Àå Ãʺ¸ÀûÀÎ º¸¾È ÇØ°áÃ¥À̶ó°í ¸»ÇÒ¼ö ÀÖ°Ú´Ù. ¹æÈ­º®Àº ¸¶Ä¡ °Ç¹° ÁÖÀ§¿¡ ´ã ÀåÀ» ½×´Â °Í°ú °°´Ù. ±×·¯³ª ¹®ÀÌ ¾ø´Â °Ç¹°Àº ÀÖÀ»¼ö ¾øÀ¸¹Ç·Î ¹®À» ¸¸µé¾î¾ß Çϸç, ÀÌ ¹®ÀÌ ¹Ù ·Î º¸¾ÈÀÇ ÇãÁ¡ÀÌ µÉ¼ö ÀÖ´Ù. ´ãÀ» ½×´Â´Ù°í »ç¶÷ÀÌ ¿Ô´Ù °¬´Ù ÇÏÁö ¾Ê´Â °ÍÀº ¾Æ´ÏµíÀÌ ¹æÈ­º® ÀÌ ÀÖ´Ù°íÇØ¼­ Á¤º¸°¡ ³×Æ®¿÷À» Ÿ°í ÇØ´ç ÄÄÇ»ÅÍ¿Í Åë½ÅÇÏÁö ¾Ê´Â°Í Àº ¾Æ´Ï¹Ç·Î ¹æÈ­º®Àº °¡Àå Ãʺ¸ÀûÀÎ º¸¾È½Ã½ºÆÀÀ̶ó°í ÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¹æÈ­º®½ÄÀÇ º¸ ¾ÈÀ» ÇØ°áÇÏ·ÁÇÑ´Ù¸é, °¡Àå ÁÁÀº ¹æ¹ýÀº ¹Ù·Î ÇØ´ç ÄÄÇ»ÅÍÀÇ ·£Ä«µå/¸ðµç Åë½ÅÆ÷Æ®¸¦ Á¦°Å ÇÏ°í ³×Æ®¿÷À¸·ÎºÎÅÍ ºÐ¸®½ÃÄÑ È¥ÀڵΠ´Â ¹æ¹ýÀÌ´Ù. ÀÌ·± ¹æÈ­º®ÀÌ ÇØ°áÇÏÁö ¸øÇÏ´Â ¼û¹Ù ²ÀÁúÀ» ¹Ù·Î ¾Ïȣȭ ±â¼ú·Î º¸¿Ï ÇØ°áÇØ¾ß ÇÑ´Ù.

1.1 Internet Attack

ÀÎÅͳݻóÀÇ º¸¾ÈħÅõ´Â ¾Õ¿¡¼­ À̾߱âÇÑ ´ë·Î µÎ°¡Áö·Î º¼¼ö ÀÖ´Ù. Çϳª´Â ½Ã½ºÆÀ³» ºÎ¿¡ ºÒ¹ýÀûÀÎ »ç¿ë±Ç(°èÁ¤)À» ȹµæÇØ ½Ã½ºÆÀÀ» ºÒ¹ýÀûÀ¸·Î »ç¿ëÇϸ鼭 Á¤º¸¸¦ ¾ò´Â ¹æ ¹ýÀ̰í, µÎ¹øÂ°´Â ³×Æ®¿÷»ó¿¡ Àü¼ÛµÇ´Â Á¤º¸¸¦ °¡·Îä´Â ¹æ¹ý(sniffing)À¸·Î Á¤º¸¸¦ ȹµæ ÇÏ´Â ¹æ¹ýÀÌ ÀÖ À»¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÇØÄ¿´Â ÀÌ µÎ°¡Áö ¹æ¹ýÀ» ¼­·Î º¹ÇÕÀûÀ¸·Î ÀÌ ¿ëÇØ Á¤º¸¸¦ ¾ò¾î³»´Â ¹æ ½ÄÀ» ÃëÇÑ´Ù. Áï ³×Æ®¿÷»ó¿¡¼­ ¿À°¡´Â µ¥ÀÌŸ¸¦ °¡·Îä¼­ Ư Á¤ ÄÄÇ»ÅÍÀÇ »ç¿ëÀÚ¿Í ÆÐ½º¿öµå¸¦ ÃëµæÇÑ ÈÄ ÇØ´ç ÄÄÇ»ÅÍ¿¡ ·Î±äÇØ¼­ ¼öÆÛÀ¯Àú ±ÇÇÑÀ» ¾Ë¾Æ³»¸é ´õ ¸¹Àº Á¤º¸¸¦ ¾ò¾î³¾¼ö°¡ ÀÖÀ¸¹Ç ·Î ´õ ¸¹Àº Á¤º¸¸¦ ¾ò¾î³½´Ù. ƯÈ÷ ÈÄÀÚ ÀÇ °æ¿ì Áï ³×Æ®¿÷ ½º´ÏÇÎ(sniffing)Àº ¹æÈ­º®À¸·Î´Â Àü Çô º¸È£ÇÏÁö ¸øÇÑ´Ù. ³×Æ®¿÷À» Ÿ°í Àü¼ÛµÇ´Â Á¤º¸´Â ÁÖ·Î ÀüÀÚ¸ÞÀÏ, ÅÚ³Ý(telnet), ÆÄÀÏÀü¼Û (FTP), WWW°Ë»öµîÀÇ Á¤º¸ Àε¥ ÀÌ °¡¿îµ¥ ÅÚ³Ý, ÆÄÀÏÀü¼ÛµîÀº »ç¿ëÀÚ°èÁ¤°ú ÆÐ½º¿öµå°¡ ³ëÃ⠵ɼö ÀÖ´Â ÇüÅ·ΠÀü¼ÛÀÌ µÇ¹Ç·Î ½Ã½ºÆÀÀÇ »ç¿ë±ÇÀ» ȹµæ ´çÇÒ¼ö ÀÖ´Â °¡´É¼ºÀÌ ´õ¿í Ä¿Áø´Ù.
96³â 9¿ù¿¡ ±¹³»¿¡¼­ ÀϾ ÀÎÅÍ³Ý ÇØÅ·(sniffing)À» ÀÌ¿ëÇÑ È¨¹ðÅ·µµ¿ë»ç°ÇÀº ÀÌ·± ¿¹ÀÇ »ç°Ç À̶ó°í ÇÒ¼ö ÀÖ´Ù. ¾ö¹ÐÇÑ Àǹ̿¡¼­ ±× »ç°ÇÀº ½º´ÏÇÎÀ̶ó°í ÇÒ¼ö ¾ø±ä ÇÏÁö ¸¸ ½º´ÏÇΰú ¸Å¿ì À¯»çÇÑ ¹æ¹ýÀ̶ó°í ÇÒ¼ö ÀÖ´Ù.

1.2 ¹æÁö¹ý

ÀÌ·± ³×Æ®¿÷ÇØÅ·À» ¹æÁöÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ¾Õ¿¡¼­ À̾߱â ÇÑ ´ë·Î ³×Æ®¿÷À» ÀüÇô ¾²Áö ¾Ê´Â °ÍÀÌ´Ù. ÀüÀÚ¸ÞÀϵµ »ç¿ëÇÏÁö ¾Ê°í, ³×Æ®¿÷À» ÀüÇô ¿¬°áÇÏÁö¾Ê°í ÄÄÇ»Å͸¦ Äֿܼ¡¼­ È¥ÀÚ¸¸ ¾²´Â °ÍÀÌ´Ù. °¡Àå ¾ÈÀüÇÑ ¹æ¹ýÀ̱äÇÏÁö¸¸ Çö½ÇÀûÀÌÁø ¸øÇÑ ¹æ¹ýÀ̶ó ÇϰڴÙ. ´ÙÀ½ ´ë¾ÈÀº ¹æÈ­º®À» ¼³Ä¡ÇÏ¿© ÀÏÁ¤ÇÑ ¹ýÄ¢À» µû¶ó Á¦¾àÀ» °¡ÇÑ º¸¾È½Ã½ºÆÀ À» »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ»¼ö ÀÖÁö¸¸ ¿©ÀüÈ÷ ³×Æ®¿÷»óÀÇ Á¤º¸ÀÇ º¸È£¿Í ½Ã½ºÆÀº¸È£¿¡¼­ ´Â ¸¸Á·½º·¯¿î ÇØ°áÃ¥À̶ó°í º¸±ä ¾î·Æ´Ù.
°¡Àå ¾ÈÀüÇÑ ¹æ½ÄÀº ¸ðµç Á¤º¸¸¦ ¾ÏȣȭÇÏ´Â ¹æ¹ýÀÌ´Ù. ±×°Íµµ »ó´çÈ÷ °­·ÂÇÑ ¾ÏÈ£ È­±â¼ú°ú »ó´çÈ÷ ±ä ŰÀÌ(Key)·Î ¾Ïȣȭ¸¦ ÇØ¼­ ÀúÀåÇϰųª Àü¼ÛÇÏ´Â ¹æ¹ýÀÌ´Ù. ÀÌ·¸ °Ô ÇØ µÑ °æ¿î¿¡´Â ´©±º°¡°¡ ³» ÄÄÇ»ÅÍ ÆÄÀÏÀ̳ª Àü¼ÛµÇ´Â Á¤º¸¸¦ ÈÉÃĺ¸°Å³ª ÃëµæÇÒ ±î¸¦ µÎ·Á¿ö ÇÒ Çʿ䰡 ¾ø´Ù. ŰÀÌ(Key) ¾øÀÌ´Â ¾î¶µç ÇØ´ç Á¤º¸¸¦ ÇØµ¶ÇÒ¼ö°¡ ¾øÀ» Å״ϱî. ±×·¯³ª ¾Ïȣȭ ¹æ½Ä¿¡µµ ±× ±¸Çö¹æ½Ä¿¡µû¶ó ¿©·¯°¡Áö ÇãÁ¡ÀÌ ¹ß»ýÇϱ⵵ ÇÏÁö ¸¸, ÇöÀç·Î´Â ÀϹÝÀûÀÎ °íµµÀÇ º¸¾È½Ã½ºÆÀÀ» À§ÇÑ °¡Àå ÀûÀýÇÑ ÇØ°áÃ¥À¸·Î ¾Ë·ÁÁ® ÀÖ °í ÀÌ¿ëµÇ°í ÀÖ´Ù. ƯÈ÷ Á¤º¸¸¦ ³×Æ®¿÷, ±×°Íµµ °³¹æµÈ TCP/IP¿Í °°Àº ¾ÈÀüÇÏÁö ¸øÇÑ ³×Æ®¿÷À» ÅëÇØ Àü¼ÛÇÏ´Â ÀüÀÚ¿ìÆíÀ̳ª Åڳݰú °°Àº ÀÀ¿ë½Ã½ºÆÀ¿¡´Â ¾ÏȣȭÀ̿ܿ¡´Â ´Ù ¸¥ ´ë¾ÈÀÌ ¾ø´Ù°í ÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÃÖ±Ù ¾Ë·ÁÁø Åڳݰú °°Àº ½Ã½ºÆÀ¿¡ ÀÀ¿ëµÇ´Â S/KeyȤÀº One Time Password¿Í °°Àº ¹æ ½ÄÀº ¾Ïȣȭ¹æ½ÄÀ̶ó°í ÇÒ¼ö´Â ¾ø°í ´Ù¸¸ ÆÐ½º¿öµå¸¦ Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°¡ »óÈ£ ¾à¼Ó ¿¡ ÀÇÇØ ÀÚÁÖ º¯°æÇÏ´Â ¹æ½ÄÀ» ¸»ÇÑ´Ù. ÀÌ´Â ´Ù¸¸ ÆÐ½º¿öµå¸¦ ¸Å¹ø º¯°æÇÔÀ¸·Î½á ÆÐ½º ¿öµå¸¦ ½º´ÏÇÎÇØ¼­ ÃëµæÇß´ÙÇÏ´õ¶óµµ ´ÙÀ½¿¡´Â ´Ù¸¥ ÆÐ½º¿öµå°¡ À¯È¿ÇϹǷΠ°ú°ÅÀÇ ÆÐ ½º¿öµå·Î´Â ½Ã½ºÆÀ¿¡ ·Î±äÇÒ¼ö ¾ø±â¶§¹®¿¡ ½Ã½ºÆÀÀ» º¸È£ÇÒ¼ö ÀÖ´Â ½Ã½ºÆÀÀÌ´Ù. ±×·¯ ³ª À̰ÍÀº ´Ù¸¸ ÆÐ½º¿öµå¸¦ ÀÚÁÖ ¹Ù²Ù´Â ¹æ¹ýÀ̱⶧¹®¿¡ ÆÐ½º¿öµåÀÌ¿ÜÀÇ ´Ù¸¥ Á¤º¸ÀÇ º¸È£¿¡´Â µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù. One Time PasswordµîÀº ÀϹÝÀûÀ¸·Î ³×Æ®¿÷ÀÀ¿ë½Ã½ºÆÀº¸ ´Ù´Â ·ÎÄ®½Ã½ºÆÀ¿¡ ·Î±äÇÏ´Â ¹æ¹ý¿¡¼­ ICÄ«µå¿Í ÀÀ¿ëÇØ¼­ ¸¹ÀÌ »ç¿ëÇÏ´Â ¹æ¹ýÀ¸·Î ³× Æ®¿÷»óÀÇ ½º´ÏÇο¡´Â ÀûÇÕÇÏÁö ¾Ê´Â ¹æ¹ýÀ̶ó°í ÇÒ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î ¼³¸íÇÏ¸é ´©±º°¡°¡ ÀÎÅͳݻ󿡼­ S/Key¸¦ ÀÌ¿ëÇØ PCÅë½Å¿¡ µé¾î¿Ô´Ù°í Ä¡ ÀÚ. ±×¸®°í ±×°ÍÀº ´©±º°¡°¡ ½º´ÏÇÎÇØ¼­ Á¤º¸¸¦ ÈÉÃ帰í ÀÖ´Ù°í °¡Á¤Çϸé, PCÅë½Å¿¡ ¼­ ´Ù½Ã ÀÌ»ç¶÷Àº ƯÁ¤ÀºÇàÀÇ È¨¹ðÅ·À¸·Î µé¾î°¡¼­ °èÁÂÀÌ並 ÇÏ°í ºñ¹Ð¹øÈ£¸¦ ÀÔ·Â ÇÑ´Ù°í Çϸé ÀÌ »ç¶÷ÀÇ PCÅë½Å¿ë ÆÐ½º¿öµå´Â º¸È£µÇ°ÚÁö¸¸ ±× À̿ܿ¡ PCÅë½ÅÀ» »ç¿ë ÇÑ ³»¿ëÀ̳ª Ȩ¹ðÅ·¿¡ µé¾î°¡¼­ ÀÔÃâ·ÂÇÑ ¸ðµç ³»¿ëÀº ´Ù ³ëÃâÀÌ µÇ°í ¸»°Ô µÈ´Ù.

1.3 ¾Ïȣȭ ½Ã½ºÆÀ

³×Æ®¿÷»ó¿¡¼­ ÁÖ°í¹Þ´Â Á¤º¸ ȤÀº ÄÄÇ»ÅÍ¿¡ ÀúÀåµÈ Á¤º¸¸¦ º¸È£ÇÏ´Â ¾Ïȣȭ½Ã½º ÆÀ¿¡¼­ Áß½ÉÀûÀ¸·Î °í·ÁÇÏ´Â ÁÖµÈ °üÁ¡Àº ´ÙÀ½ ¼¼°¡ÁöÀÌ´Ù. ±â¹Ð¼ºÀº ÀÚ·áÀÇ ³»¿ëÀ» ¿øÄ¡¾Ê´Â Á¦ 3ÀÚ¿¡°Ô ³ëÃâµÇÁö ¾Êµµ·Ï ¹æÁöÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. À̸¦ À§Çؼ­´Â ÀÚ·áÀÇ ³»¿ëÀ» ¾ÏȣȭÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.
ÅëÇÕ¼ºÀº ÀÚ·áÀÇ ³»¿ëÀ» ³ëÃâµÇÁö´Â ¾Ê´Â´ÙÇÏ´õ¶óµµ Á¦ 3ÀÚ°¡ ÀÚ·áÀÇ ³»¿ëÀ» ¼ö Á¤Çϰųª ÷°¡Çϰųª ¼ø¼­¸¦ ¹Ù²Ù°Å³ªÇÏ´Â °ÍÀ» ¹æÁöÇϱâÀ§ÇÑ ±â¼úÀÌ´Ù. ÀÌ·± °Í À» ¹æÁöÇϱâÀ§Çؼ­ ÁÖ·Î ¸Þ¼¼ÁöÀÇ Ã¼Å©¼¶ ȤÀº ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®(Message Digest) ¸¦ ±¸ÇØ µÒÀ¸·Î½á ¸Þ½ÃÁöÀÇ ¼öÁ¤¿©ºÎ¸¦ ³ªÁß¿¡ È®ÀÎÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.
ºÎÀιæÁö(Non-Repudiation) ȤÀº ¼Û½ÅÀÚ ½ÅºÐÈ®Àιæ¹ýÀº ¸Þ½ÃÁö´Â µðÁöÅ» ÇüÅ·Π¸¸µé¾îÁ® ÀÖÀ¸¹Ç·Î ½±°Ô À§Á¶ÇÒ¼ö ÀÖÀ¸¸ç À§Á¶µÈ µðÁöÅ» Á¤º¸¸¦ È®ÀÎ ÇÒ ±æÀÌ ¾ø ´Ù. ±×·¯³ª ÀüÀÚ¼­¸íÀ» »ç¿ëÇϸé, ¼ö½ÅÀÚÀÇ ÀÔÀå¿¡¼­´Â ¸Þ½ÃÁöÀÇ ¼Û½ÅÀÚÀÇ ½ÅºÐÀ» È®ÀÎÇÒ¼ö ÀÖÀ¸¸ç ¼Û½ÅÀÚ´Â ÀÚ½ÅÀÌ ÀüÀÚ¼­¸íÀ» ÇØ¼­ º¸³½ ³»¿ëÀ» ºÎÀÎÇÒ¼ö ¾ø°Ô µÈ´Ù.
¿ì¸®´Â ¾ÕÀ¸·Î ÀÌ·± ¾Ïȣȭ/¸Þ½ÃÁöÅëÇÕ¼ºÃ¼Å©/ÀüÀÚ¼­¸íµîÀÇ ±âº»ÀûÀÎ ±â´ÉÀ» µÚ ¿¡ ½ÇÁ¦·Î ÇÁ·Î±×·¡¹ÖÇϸ鼭 Çϳª Çϳª È®ÀÎ ÇØ ³ª°¥ °ÍÀÌ´Ù.

2. ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀ

¾Ïȣȭ±â¼úÀº ¸ðµç Á¤º¸Åë½Å ºÐ¾ß¿¡ Àû¿ëÇÒ¼ö ÀÖ´Ù. µðÁöÅ» Á¤º¸¸¦ ´Ù·ç´Â ¸ðµç ÀÀ¿ëºÐ¾ß ¿¡¼­ º¸¾ÈÀÌ ÇÊ¿äÇÑ ºÐ¾ß¿¡´Â ¸ðµÎ Àû¿ëÇÒ ¼ö ÀְԵȴÙ. ÇöÀç ÄÄÇ»ÅÍÀÀ¿ë½Ã½ºÆÀµé°¡¿îµ¥ ¾Ïȣȭ±â¼úÀÌ Àû±ØÀûÀ¸·Î ÀÀ¿ëµÇ´Â ºÐ¾ß¸¦ ³ª¿­ÇØ º¸¾Ò´Ù.

2.1 Transport Layer Security : IPSec, SSL, GSSAPI, PCT

TCP/IP³×Æ®¿÷ ÇÁ·ÎÅäÄÝÀÌ ÀüÀûÀ¸·Î º¸¾È¿¡ ´ëÇÑ ´ëÃ¥ÀÌ ¾ø´Â ÇÁ·ÎÅäÄÝÀ̾ú´Ù. ±×·¡¼­ ¸¹Àº º¸¾ÈÀÀ¿ë½Ã½ºÆÀµéÀÌ µîÀåÇÏ¿´´Ù. ±×·¯³ª °¢°¢ÀÇ ÀÀ¿ë½Ã½ºÆÀÀÌ º¸¾ÈÇÁ·ÎÅäÄÝÀ» Àû¿ëÇÏ´Ù°¡ º¸´Ï±î Â÷¶ó¸® IP·¹À̾¼­ º¸¾ÈÀÌ º¸ÀåµÇ¸é Áï Secure ChannelÀÌ º¸ÀåµÇ¸é ÀÀ¿ë½Ã½ºÆÀÀº º¸¾È¹®Á¦¸¦ ½±°Ô ÇØ°áÇÒ ¼ö ÀÖÁö ¾ÊÀ»±îÇÏ´Â ¹ß»ó¿¡¼­ Transport Layer¿¡¼­ÀÇ Security°¡ ¸¹ ÀÌ ³íÀǵǰí ÀÖ´Ù.
ÀÌ ºÐ¾ßÀÇ ´ëÇ¥ÀûÀÎ ÇÁ·ÎÅäÄݷμ­´Â IPSecÀÌ´Ù. IP·¹À̾ÀÇ ÆÐŶÀ» ¾ÏÈ£È­ÇØ¼­ Àü´ÞÇÏ ´Â ¾ÆÀ̵ð¾î·Î¼­ ÆÐŶÀ» ¾ÏȣȭÇϱâÀ§ÇÑ ESP(Encapsulated Security Payload)ÇÁ·ÎÅäÄݰú ÆÐŶÀÇ ÀÎÁõÀ» À§ÇÑ AH(Authentication Header)ÇÁ·ÎÅäÄÝÀÌ Áß½ÉÀÌ´Ù. ´ëºÎºÐÀÇ ºñ´ëĪÇü¾Ïȣȭ¸¦ ÀÌ ¿ëÇÑ ÇÁ·ÎÅäÄÝÀÌ ±×·¸µíÀÌ IPSec¿ª½Ã ۱³È¯ ȤÀº ۰ü¸®°¡ °ñÄ¡°Å¸®ÀÌ´Ù. IPSecÀ» À§ÇÑ Å°±³È¯ÇÁ·ÎÅäÄݷδ ISAKMP/Oakley, SKIP, PhoturisµîÀÌ Á¦¾ÈµÇ°í ¶Ç ±¸ÇöµÇ¾î ÀÖ´Ù.
IPSecÀº NRL¿¡¼­ IPv6¸¦ ±¸ÇöÇϸ鼭 IPSecÀ» ±¸ÇöÇß°í, IPv4¿¡¼­µµ ±¸ÇöÇß´Ù. ISAKMP/Oakley´Â ½Ã½ºÄڽýºÆÀ(Cisco System)¿¡¼­ ±¸ÇöÇÏ¿´À¸¸ç http://www.cisco.com/public/library/isakmp.html °ú http://web.mit.edu/network/isakmp ¿¡¼­ ±¸ ÇÒ¼ö ÀÖ´Ù. SKIPÀº INCOG¿Í SUN¿¡¼­ ±¸ÇöÇØ¼­ http://skip.incog.com/ ¿¡¼­ ±¸ÇÒ¼ö ÀÖ´Ù.
IPSecÀº ÇâÈÄ IPv6ȤÀº IPng¿¡ ³»ÀåµÇ¾î ÇâÈÄ ÀϹÝÀûÀ¸·Î »ç¿ëÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. IPSec°ú °ü·ÃµÈ ÀϹÝÀûÀÎ Á¤º¸´Â http://www.cs.arizona.edu/xkernel/www/ipsec/ipsec.html ¿¡¼­ ±¸ÇÒ¼ö ÀÖ ´Ù.
SSL(Secure Socket Layer)Àº º¸¾È¹®Á¦¿¡ ´ëÇØ Á»´õ ÀϹݷÐÀûÀÎ Á¢±ÙÀ» ½ÃµµÇßÀ¸¸ç ³Ý½ºÄÉÀÌ ÇÁ ³×ºñ°ÔÀÌÅÍ¿¡ Àû¿ëµÇ¸é¼­ ¼º°øÀûÀ¸·Î º¸±ÞµÈ ÇÁ·ÎÅäÄÝÀÌ´Ù. IPSecÀº IP datagramÁï °¢ °¢ÀÇ ÆÐŶÀ» ¾ÏȣȭÇϴµ¥ ÁýÁßÇß´Ù¸é SSLÀº ¼¼¼Ç, ȤÀº ä³ÎÀ» ¾ÏȣȭÇÏ´Â ¹æ¹ýÀ» ¼±Åà Çß´Ù. ±×·¯¹Ç·Î IPSecÀº ±¸ÇöÇÏ±ä ¾î·ÆÁö¸¸ IP¸¦ »ç¿ëÇÏ´Â ´ëºÎºÐÀÇ ÀÀ¿ë½Ã½ºÆÀ¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é IP broadcasting°°Àº ºÐ¾ß¿¡µµ Àû¿ëÇÒ¼ö ÀÖÁö¸¸ SSLÀº ¿¬°áµÈ ¼¼¼Ç¸¸À» Áö¿øÇÑ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ³×Æ®¿÷ ÀÀ¿ë½Ã½ºÆÀµé¿¡°Ô Àß Àû¿ëÇÒ¼ö ÀÖ¾ú´Ù. ÇöÀç SSLÀ» ÀÌ¿ëÇÑ SSL WWW Bowser(Netscape, Microsot Explore), SSL telnet, SSL ftp, SSL Newsµî ´Ù ¾çÇÑ ÀÀ¿ë½Ã½ºÆÀµéÀÌ µîÀåÇϰí ÀÖ´Ù. Netscape»ç´Â SSLref¶óÀ̺귯¸®¸¦ °ø°³ÇßÀ¸³ª ¹Ì±¹¿Ü¿¡¼­ ´Â ¾Æ½±°Ôµµ »ç¿ëÇÒ¼ö ¾ø´Ù. ´Ù¸¸ È£ÁÖÀÇ Eric Young ÀÌ ¸¸µç SSLeay°¡ ÀÖ´Ù. SSL¿¡ °üÇÑ Á¤º¸´Â http://home.netscape.com/newsref/std/SSL.html ¿¡¼­ ¾òÀ»¼ö ÀÖ´Ù.
À̿ܿ¡µµ GSSAPI(rfc-1508, rfc-1509 )´Â Generic Security Service Application Programming InterfaceÀÇ ¾à¾î·Î¼­ ¾Ïȣȭ ½Ã½ºÆÀÀ» ¸¸µé±âÀ§ÇÑ ÀÀ¿ë½Ã½ºÆÀÀÇ ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆÐÀ̽º¸¦ Ç¥ÁØÈ­Çؼ­ Á¤ÀÇÇÏÀÚ´Â ¾ÆÀ̵ð¾î¿¡¼­ Ãâ¹ßÇßÀ¸³ª ÇöÀç ±¸ÇöµÈ »ç·Ê°¡ ¸¹Áö ¾Ê´Ù. GSSAPI °ü·ÃÁ¤º¸´Â http://www.dstc.qut.edu.au/~barton/work/project.html ¿¡ ÀÖ´Ù.
gssapi±¸Á¶µµ

¶ÇÇÑ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®´Â PCT(Private Communication Technology) ÇÁ·ÎÅäÄÝÀ» Á¦¾ÈÇß°í ÃÖ±Ù PCT 1.0Àº SSL 2.0, 3.0°ú ȣȯÀ» À¯ÁöÇÑ´Ù. °ü·ÃÁ¤º¸´Â http://www.microsoft.com/intdev/security/faq4.htm¿¡ ÀÖ´Ù.

2.2 ÀüÀÚ¿ìÆí º¸¾È

ÇöÀç ÀÎÅͳÝÀ» »ç¿ëÇÏ´Â »ç¿ëÀÚ°¡ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ´Â µµ±¸°¡¿îµ¥ Çϳª´Â ¹Ù·Î ÀüÀÚ¿ìÆíÀÌ ´Ù. ¸¹Àº »ç¶÷µéÀÌ ÀüÀÚ¿ìÆíÀ» ÅëÇØ °³ÀÎÀûÀ̰ųª »ç¾÷°ú °ü·ÃµÈ ÀϵéÀ» Çϰí ÀÖ´Ù. Á¤º¸ È­°¡ °¡¼ÓµÉ¼ö·Ï ÀüÀÚ¿ìÆíÀÇ Á߿伺Àº Á¡Á¡ °­Á¶µÉ °ÍÀÌ´Ù. ¶Ç »ç¿ë·®µµ ´Ã¾î°¥ °ÍÀÌ¸ç ´Ù ·ç´Â ³»¿ëµµ Á¡Â÷ °æÁ¦ÀûÀΰųª Á¤Ä¡/¿Ü±³ÀûÀÎ Áß¿äÇÑ ³»¿ëµéÀÌ µÉ °ÍÀÌ´Ù. ÀÌ·± °üÁ¡¿¡¼­ º¸¾È ÀüÀÚ¿ìÆí½Ã½ºÆÀÀº ¸Å¿ì Áß¿äÇÏ°Ô »ý°¢µÇ¾îÁ® ¿Ô°í, ÀÏÂïºÎÅÍ ¸î¸î ½Ã½ºÆÀµéÀÌ °³¹ßµÇ ¾î ¿Ô´Ù. ´ëÇ¥ÀûÀÎ º¸¾È ÀüÀÚ¿ìÆí½Ã½ºÆÀÀÌ ¹Ù·Î PGP(Pretty Good Privacy)( http://www.ifi.uio.no/~staalesc/PGP/)´Ù. PGP´Â Áü¸Ó¸Ç(Zimmermann) À» Áß½ÉÀ¸·Î ÇÑ ÀÎÅͳݻóÀÇ ÀÚ¿øÀÚµéÀÌ ¸¸µç Á¦Ç°ÀÌ´Ù. PGPÀÇ °¡Àå Å« Ư¡Àº ´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀ¸ ·Î DES¸¦ »ç¿ëÇÏÁö ¾Ê°í IDEA¸¦ »ç¿ëÇÑ´Ù´Â °Í°ú, RSA Public KeyÀÎÁõ±¸Á¶°¡ PEMµî ±¹ Á¦Ç¥Áذú´Â ´Þ¸® »çÀ̹ö½ºÆÐÀ̽ºÀÇ ¹®È­¿Í ¹ÐÁ¢ÇÏ°Ô ºñ½ÁÇÑ Trust of WebÀ̶ó´Â ±¸Á¶¸¦ °¡ Áö°í ÀÖ´Â Á¡µéÀÌ´Ù. IETF¿¡¼­ ÀÎÅÍ³Ý º¸¾È ¸ÞÀÏÇ¥ÁØÀ¸·Î Á¦Á¤ÇÑ ÇÁ·ÎÅäÄÝÀº PEM(Privacy Enhanced Mail, RFC1421 - 1424)ÀÌ´Ù. PEMÀº CA(Certificate Authority)µîÀ» ¿ä±¸ ÇÏ ¸ç ±× »ç¾çÀÌ ¹æ´ëÇÏ°í º¹ÀâÇØ Çö½ÇÀûÀ¸·Î »ç¿ëµÇÁö ¸øÇÏ°í ¸î°¡Áö ÇüÅ·Π´Ü¼øÈ­ µÇ¾î°¬ ´Ù. ±× °¡¿îµ¥ ´ëÇ¥ÀûÀÎ °ÍÀÌ ¹Ù·Î RIPEM(Riordan's Internet Privacy Enhanced Mail)ÀÌ´Ù. RIPEMÀº PEMÀÇ º¹ÀâÇÑ »ç¾çÀ» ´Ü¼øÈ­ÇßÀ¸¸ç ±¸Çö»ç·Êµµ ¸¹ÀÌ ³ª¿Í »ó´çÈ÷ º¸±ÞµÇ±âµµ Çß´Ù(http://www.cs.indiana.edu/ripem/ripem-faq). ±×·¯´Ù°¡ PEM, RIPEMÀÇ º¹À⼺À» ´Ü¼øÇÏ°Ô ¸¸µé±âÀ§ÇØ ¸ÞÀÏ»ç¾çº¸´Ù´Â ¹®¼­ÀÇ ¾ç½Ä(MIME)¸¸À» Á¤ÀÇÇÑ MOSS( )°¡ Á¦¾ÈµÇ¾úÀ¸³ª MOSS»ç¾çÀº ³Ê¹« À¯µ¿ÀûÀ̾ ÀÌ »ç¾ç¸¸À¸·Î´Â ȣȯ¼ºÀ» À¯ÁöÇϱⰡ ½±Áö¾ÊÀ» Á¤µµ ¿´ ´Ù. ÃÖ±Ù¿¡´Â ¹Ì±¹ RSA»ç°¡ S/MIMEÀ̶ó´Â MOSS¿Í ºñ½ÁÇÏÁö¸¸ »óÈ£ ȣȯ¼º¿¡ ÃÐÁ¡À» ¸Â Ãá »ç¾çÀ» Á¦¾ÈÇß°í »ó´ç¼ö ±¸ÇöµÇ¾î ÀüÀÚ¿ìÆí º¸¾ÈÀ¸·Î ÃÖ±Ù ¸¹ÀÌ º¸±ÞµÇ°í ÀÖ´Ù. ´ÙÀ½ ÀοëÀº S/MIMEÀÇ FAQ°¡¿îµ¥ ÇÑ Ç׸ñÀ» ¹ø¿ªÇÑ °ÍÀÌ´Ù. PGP, PEM, MOSS, S/MIMEµîÀ» °£·«È÷ ºñ±³ÇÑ Ç׸ñÀÌ´Ù.
* S/MIME°ú PGP, PEM, MOSS¿Í ´Ù¸¥Á¡Àº ¹«¾úÀΰ¡?

ÀÌµé ¸ðµÎ´Â ÀüÀÚ¿ìÆíÀÇ º¸¾È ±â¹ýÀÇ ÀÏÁ¾ÀÌ´Ù. ¸ðµÎ´Ù authentication°ú privacy¸¦ º¸ÀåÇÑ´Ù. PGP, PEM, MOSS´Â °¢°¢ÀÌ ¼­·Î ¸Å¿ì »óÀÌÇÏ´Ù. ±×·¯¹Ç·Î À̵éÀ» S/MIME°ú °¢°¢ ºñ±³ÇØ¾ß ÇÒ °Í°°´Ù. PGP´Â »ç¾ç(specification)À̸鼭 ÀÀ¿ëÇÁ·Î±×·¥(application)À̶ó°í ºÁ¾ß ÇÒ °Í °°´Ù. PGP´Â »ç¿ë ÀÚµéÀÌ ¼­·Î ۸¦ ±³È¯ÇÏ°í ¼­·Î ÀÎÁõ(trust)À» È®¸³Çϴ ü°èÀÌ´Ù. ÀÌ·± "web of trust"±¸Á¶´Â ºñ °ø ½ÄÀûÀ̱⶧¹®¿¡ ÀÛÀº ±×·ì¿¡´Â Àû¿ëÇϱ⠽±´Ù. ±×·¯³ª ¸¹Àº ¼öÀÇ »ç¶÷µéÀÌ Æ÷ÇÔµÈ ±×·ì¿¡¼­´Â °ü¸®ÇϱⰡ ½±Áö ¾Ê°ÔµÈ´Ù. ±×·¯³ª S/MIMEÀº PGPº¸´Ù´Â ÀûÀÀ¼ºÀÌ ÁÁ°í Á»´õ º¸¾È¼ºÀÌ ÁÁ´Ù. S/MIMEÀº ÀÛÀº ±×·ìÀÇ »ç¿ëÀڵ鰣ÀÇ ½Å·Ú ±¸Á¶¸¦ ½±°Ô ±¸ÃàÇÒ ¼ö ÀÖÀ»»Ó ¾Æ´Ï¶ó Å« ±×·ìÀ» ±¸ ¼ºÇϴµ¥µµ ½±°Ô ÀûÀÀÇÏ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù. S/MIMEÀº ¸¹Àº ÀüÀÚ¿ìÆí ÀÀ¿ëÇÁ·Î±×·¥¿¡ Á¢ ¸ñµÉ¼ö ÀÖ°í ±×·¸°Ô Çϴ°ÍÀÌ ½±´Ù. PEMÀº IETF RFC 1421-1424±îÁö Á¤ÀǵǾî ÀÖ´Ù. PEMÀº ÃʱâÀÇ ÀüÀÚ¸ÞÀÏ º¸¾È Ç¥ÁØÀÌ´Ù. PEMÀº ÁÖ·Î ¸Þ½ÃÁö Æ÷¸ä°ú ÀÎÁõ±¸Á¶¸¦ Á¤ÀÇÇÑ °ÍÀÌ´Ù. PEM¸Þ½ÃÁö´Â 7bitÅØ½ºÆ® ¸Þ½ÃÁö¸¦ ±â ¹ÝÀ¸·Î µÇ¾îÀִµ¥ ¹ÝÇØ S/MIMEÀº MIME¹ÙÀ̳ª¸® attachment·Î µ¿ÀÛÇϵµ·Ï ¼³°èµÇ¾ú´Ù. ÀÎÁõ ±¸Á¶¸¦ ±¸¼ºÇÏ´Â °Íµµ flexibleÇÏ°Ô µÇ¾îÀÖ°í, ÀÛÀº ¿öÅ·±×·ìµéÀÇ ±¸Á¶¸¦ ¸¸µå´Âµ¥ ¸Å¿ì ½±°ÔµÇ ¾î ÀÖÀ¸¸é¼­µµ ÀÎÁõ±×·ìÀÇ ±Ô¸ð¿¡ ÀûÇÕÇÑ ´ë¾ÈÀ» °¡Áö°í ÀÖ´Ù. MOSS´Â PEMÀÇ Á¦¾àÀ» ±Øº¹ÇϱâÀ§ÇØ ¸¸µé¾îÁø °ÍÀ¸·Î¼­ MIME¸Þ½ÃÁö·Î¸¸ Ç¥ÇöÇÏ°í ³ª¸ÓÁö »ç¾çÀº ÀÚÀ¯·Ó°Ô »ç¿ëÇϵµ·Ï ÇÑ °ÍÀÌ´Ù. ±×·¯³ª MOSS´Â ¸¹Àº ±¸Çö optionÀ» °¡Áö°í À־ µÎ »ç¶÷ÀÇ MOSS¸ÞÀÏ ÇÁ·Î±×·¥À» ±¸ÇöÇÏ´Â »ç¶÷ÀÌ »óÈ£ ȣȯµÇ´Â ÇÁ·Î±×·¥À» ¸¸µé±â°¡ ¸Å¿ì ¾î·Æ °Ô µÇ¾îÀÖ´Ù. MOSS´Â »ç¾ç(Specification)À̶ó±â º¸´Ù´Â ¾î¶² ±¸Á¶(Framework)Á¤µµ¸¦ Á¤ÀÇÇß´Ù °í º¸´Â°ÍÀÌ ´õ ÁÁ°Ú´Ù. ±×·¯³ª S/MIMEÀº »óȣȣ¿Ï¼º¿¡ ¿ªÁ¡À» µÎ°í ÀüÀÚ¿ìÆí¿¡ ÃÐÁ¡À» µÎ°í ¸¸ µé¾îÁø °ÍÀÌ´Ù.

2.3 Secure-Shell(SSH)

¾Õ¿¡¼­ À̾߱â ÇßµíÀÌ ÅÚ³Ý È¤Àº rloginµîÀº ½º´ÏÇαâ¹ý¿¡ ÀÇÇØ ¸Å¿ì Ãë¾àÇÑ ÀÀ¿ë½Ã½ºÆÀÀÌ ´Ù. ÀÌ·± Á¡À» º¸¿ÏÇϱâÀ§ÇØ S/Keyµîµµ Á¦¾ÈµÇ¾úÁö¸¸ ÀüÀûÀÎ ´ë¾ÈÀº µÉ¼ö°¡ ¾ø´Ù. ±×·¯³ª SSH, Secure-Telnet, SSLtelnetµî°ú °°ÀÌ ÅÚ³Ý Àüü ¼¼¼ÇÀ» ¾ÏÈ£È­ÇØ¼­ »ç¿ëÇÏ´Â ÇÁ·ÎÅäÄݵéÀÌ Á¦¾ÈµÇ¾ú°í ½ÇÁ¦ »ç¿ëÇÑ´Ù. À̰¡¿îµ¥ SSH´Â ÇɶõµåÀÇ DataFellows (http://www.datafellows.com/) ¿¡¼­ »ó¿ëÈ­ÇØ¼­ »ó´çÇÑ º¸±ÞÀÌ ÀÌ·ç¾îÁø Á¦Ç°ÀÌ´Ù. À̵é Secure-ShellÀº ·Î±ä¸í°ú ÆÐ½º¿öµå¸¸À» º¸È£ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó(Authentication) ·Î±äÇÑÈÄ »ç¿ë ÇÏ´Â ¸ðµç ¼¼¼ÇÀ» º¸È£ÇÏ´Â ¿ªÇÒ(Confidentiality)À» ÇϹǷΠÅڳݻ󿡼­ÀÇ º¸¾È¿¡ ¿Ïº®ÇÑ ´ë¾È À̶ó°í ÇÒ¼ö ÀÖ´Ù.

2.4 WWW Security

WWW SecurityºÐ¾ß´Â IETFÀÇ Security AreaÀÇ WTS(Web Transaction Security)¿öÅ·±×·ì¿¡¼­ Ç¥ ÁØÀ» ³íÀÇ Çϰí ÀÖ´Ù. ±×µ¿¾È EITÀÇ S-HTTP¿Í NetscapeÀÇ SSL±×¸®°í W3CÄÁ¼Ò½Ã¿òÀÇ SEAµîÀÇ ÇÁ·ÎÅäÄÝÀÌ Á¦¾ÈµÇ°í ³íÀǵǰí ÀÖÀ¸³ª ÇöÀç S-HTTP¸¸ÀÌ working draft»óÅÂÀÌ´Ù. WWW SecurityºÐ¾ß¿¡¼­´Â ¹«¾ùº¸´Ùµµ ºê¶ó¿ìÁ®¸¦ ¸¸µå´Â ȸ»çµé(Netscape.Microsoftµî)ÀÌ ¼± ÅÃÇÏ´Â º¸¾È ÇÁ·ÎÅäÄÝ¿¡ÀÇÇØ Ç¥ÁØÀÌ ÁÂÁö¿ìÁöµÈ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ÇöÀç Netscape»ç´Â SSL À» Microsoft»ç¿ª½Ã SSL°ú PCT¸¦ Áö¿øÇϰí ÀÖ´Ù. SSLÀº ÇöÀç ¹öÁ¯ÀÌ 3.0 »ç¾ç±îÁö ¹ßÇ¥µÇ ¾î ÀÖÀ¸¸ç, PCT´Â ÇöÀç ¹öÁ¯ÀÌ 1.0 »ç¾çÀÌ ¹ßÇ¥µÇ¾î ÀÖ´Ù. ±×·¯³ª IETF¿¡¼­´Â S-HTTP¸¦ ³íÀÇÇϰí ÀÖ´Â Áß´Ù. ÀÌ ºÐ¾ß¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â http://madang.dacom.co.kr/dgguen/seminar/wwwpay.htmlÀ» Âü°íÇϱ⠹ٶõ´Ù.

2.5 Secure-Phone

¾ÏȣȭµÈ À½¼ºÅë½Å ½Ã½ºÆÀÀº µÑ·Î ±¸ºÐÇÒ¼ö ÀÖ´Ù. ÀüÅëÀûÀÎ ÀüÈ­½Ã½ºÆÀ¿¡¼­ º¸¾ÈÀ» °¡¹ÌÇÑ ÀüÈ­½Ã½ºÆÀÀÌ ÀÖÀ»¼ö ÀÖ°í, ÄÄÇ»ÅÍ³×Æ®¿÷»ó¿¡¼­ÀÇ À½¼ºÅë½Å¿¡ º¸¾ÈÀ» °¡¹ÌÇÑ ½Ã½ºÆÀÀÌ ÀÖ À»¼ö ÀÖ´Ù. ÀüÀڷδ Bell-Northern ¿¬±¸¼Ò¿¡¼­ ¸¸µç Secure-ISDNÀüÈ­±â ÇÁ·ÎÅäŸÀÔÀÌ 1987 ³â¿¡ ¹ßÇ¥µÈÀûÀÌ ÀÖ°í, ¹Ì±¹ÀÇ NSA°¡ ¼³°èÇÑ STU-III¶ó´Â ¾ÏȣȭÀüÈ­±â°¡ 1994³â¿¡ IEEE Àú³Î¿¡ ¹ßÇ¥µÇ¾ú¾ú°í AT&T¿Í GE°¡ ¾à 30--40¸¸´ë »ý»êÇØ ¹Ì±¹¹æ¼º°ü·Ã±â°ü¿¡¼­ »ç¿ëÇÑ ´Ù°í ÇÑ´Ù (Applied Cryptography Second Edition P566).
ÄÄÇ»ÅÍ ³×Æ®¿÷»ó¿¡¼­ÀÇ À½¼ºÅë½ÅÀº ÀϹÝÀûÀ¸·Î Internet PhoneµîÀÌ ¾Ë·ÁÁ® ÀÖÀ¸³ª ¾Ïȣȭ±â ¼úÀ» µµÀÔÇÑ °ÍÀº ¾Æ´Ï´Ù. ºñ½ÁÇÏ°Ô ÀÎÅͳݻ󿡼­ À½¼ºÅë½ÅÀ» °¡´ÉÇϰÔÇÏ´Â ¼ÒÇÁÆ®¿þ¾îÀÌ ¸é¼­ ¾Ïȣȭ±â¼úÀ» Àû¿ëÇØ º¸¾ÈÈ­ÇÑ °ÍÀ¸·Î´Â Speak Freely¿Í Netfone(UNIX), Nautilus(http://www.lila.com/nautilus), PGPFone(http://web.mit.edu/network/pgpfone)µîÀÌ ÀÖ´Ù.

2.6 Desktop-Security Tool

ÀϹÝÀûÀ¸·Î ÀÚ½ÅÀÌ »ç¿ëÇÏ´Â °³Àοë ÄÄÇ»ÅÍÀÇ ÆÄÀϵéÀ» ¾ÏÈ£È­ÇØ¼­ ÀúÀåÇÏ´Â ¾Ïȣȭµµ±¸µé À» ¸»ÇÑ´Ù. À̰÷¿¡¼­´Â ÁÖ·Î ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®Áò¸¸À» »ç¿ëÇϸç ÁÖ·Î À©µµ¿ìÁîÀÇ ÆÄÀÏ °ü¸®ÀÚ¿Í ¿¬µ¿Çؼ­ µ¹¾Æ°¡µµ·Ï ¸¸µç´Ù. ´ëÇ¥ÀûÀÎ Á¦Ç°À¸·Î´Â RSA»çÀÇ RSA Secure PC(http://www.rsa.com/PRODUCTS/end_user.html)¿Í ÇɶõµåÀÇ DataFellows»çÀÇ F-Secure Desktop (http://www.datafellows.com/f-secure/desktop/)µî ¿©·¯ Á¾·ù°¡ ÀÖ´Ù.

3. ¾Ïȣȭ °³³ä

ÀÚ ÀÌÁ¦´Â ¾Õ¿¡¼­ ÀåȲÇÏ°í ±æ°Ô À̾߱âÇÑ º¸¾È½Ã½ºÆÀÀ» ¸¸µé±âÀ§ÇÑ ±âº»±â¼ú Áï ¾Ïȣȭ¶õ °ú¿¬ ¹«¾ùÀΰ¡¸¦ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ¿©±â¼­´Â ¾Ïȣȭ±â¼ú ¾Ë°í¸®ÁòÀÇ Á¾·ù¿Í ±â´ÉµîÀÇ ±âº» ÀûÀÎ »çÇ×À» ¾Ë¾Æº¸°í ´ÙÀ½ºÎÅÍ´Â ÇØ´ç ¾Ïȣȭ¸¦ ½ÇÁ¦·Î ÇÁ·Î±×·¡¹ÖÇÒ¼ö ÀÖ´Â µµ±¸µé°ú ÇÁ ·Î±×·¡¹Ö ¹æ¹ýÀ» ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

3.1 ´ëĪÇü ¾ÏÈ£¾Ë°í¸®Áò(Symmetric Cryptography)

´ëĪÇü¾ÏÈ£ ¾Ë°í¸®ÁòÀº ´ÙÀ½ ±×¸²Ã³·³ ¾ÏȣȭÇÒ¶§ »ç¿ëÇÑ Å°(key)¸¦ ¾ÏȣȭµÈ ÀڷḦ º¹È£ È­ÇÒ¶§ °°Àº Ű(key)¸¦ »ç¿ëÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. Áï
        Ek( M ) = C
        Dk( C ) = M
¿©±â¼­ µ¿ÀÏÇÑ kŰÀ̸¦ »ç¿ëÇØ ¾Ïȣȭ¿Í º¹È£È­¸¦ ÇÏ´Â ¾Ïȣȭ ¹æ½ÄÀ» ¸»ÇÑ´Ù.
´ëĪÇü ¾Ïȣȭ ¹æ½ÄÀº Å©°Ô µÎ°¡Áö·Î ³ª´©¾î º¼¼ö ÀÖ´Ù. Çϳª´Â ºí·° ¾Ïȣȭ(Block Ciper) ¿Í ½ºÆ®¸² ¾Ïȣȭ(Stream Ciper)·Î ±¸ºÐµÈ´Ù.
ºí·°¾Ïȣȭ¾Ë°í¸®ÁòÀº ¾ÏȣȭÇÒ¶§ ÀڷḦ °íÁ¤µÈ ÀÏÁ¤·®ÀÇ ºí·°´ÜÀ§·Î ¾ÏȣȭÇϱ⶧¹®¿¡ Àüü ¾ÏȣȭÀÚ·áÀÇ Å©±â°¡ ÇØ´ç ºí·°ÀÇ ¹è¼ö°¡ µÇ¾î¾ßÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. ºí·° ¾Ïȣȭ ¾Ë °í¸®ÁòÀ¸·Î´Â µîÀÌ ÀÖ´Ù.

½ºÆ®¸²¾Ïȣȭ ¾Ë°í¸®ÁòÀº ÀڷḦ ¾ÏȣȭÇÒ¶§ ºí·°´ÜÀ§·Î ÇÏÁö ¾Ê´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù. Áï ¾Ï È£È­ÇÏ´Â ÀÚ·áÀÇ ±¸¼º°ú Å©±â°¡ ´Ù¾çÇÏ°í ¿¹ÃøÇÒ¼ö ¾ø´Â ȯ°æÀ϶§ ÀûÇÕÇÑ ¾Ïȣȭ ¹æ¹ýÀÌ´Ù.
½ºÆ®¸² ¾Ïȣȭ ¾Ë°í¸®ÁòÀ¸·Î´Â

µîÀÌ ÀÖ´Ù.

´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀÇ ¿ª»ç´Â ¿À·¡µÇ¾ú°í ´Ù¾çÇÑ ¾Ë°í¸®ÁòÀÌ °³¹ßµÇ¾î ÀÖ´Ù. ±×·¯³ª ºí·° ¾Ïȣȭ¾Ë°í¸®ÁòÀÇ ´ÜÁ¡Àº ³×Æ®¿÷ ȯ°æ¿¡¼­´Â »ç¿ëÇϱⰡ ¾î·Æ´Ù´Â »ç½ÇÀÌ´Ù. Áï ÀÚ·á (M)¸¦ ƯÁ¤ºñ¹ÐŰ(K)·Î ¾ÏÈ£È­ÇØ¼­ ¾ÏȣȭµÈ ÀÚ·á(E)¸¦ ³×Æ®¿÷À» ÅëÇØ ´Ù¸¥ °÷¿¡ Àü´ÞÇß´Ù °í Ä¡ÀÚ ¾ÏȣȭµÈ ÀÚ·á (E)´Â ¾Ïȣȭ°¡ µÇ¾ú±â¶§¹®¿¡ ¾ÈÀüÇÏ°Ô Àü´ÞÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯ ³ª ¾ÏȣȭµÈ ÀÚ·á(E)¸¦ ¹ÞÀº Ãø¿¡¼­ À̸¦ Ç®±âÀ§Çؼ­´Â ºñ¹ÐŰ(K)°¡ ÀÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. ±× ·¯³ª ÀÌ ºñ¹ÐŰ(K)¸¦ ¾î¶»°Ô ¾ÈÀüÇÏ°Ô Àü´ÞÇÒ ¼ö Àִ°¡ÇÏ´Â ¼÷Á¦°¡ »ý±ä´Ù. ÀÌ·± ¹®Á¦´Â ´ëĪÇü ¾Ïȣȭ ±â¹ýÀÇ ´ÜÁ¡ÀÌ µÈ´Ù.

3.2 ºñ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®Áò(Asymmetric Cryptography)

ºñ´ëĪÇü ¾Ïȣȭ±â¹ýÀº ÀڷḦ ¾ÏȣȭÇÒ¶§ »ç¿ëÇϴ ŰÀÌ¿Í º¹È£È­ÇÒ¶§ »ç¿ëÇϴ ŰÀ̰¡ ¼­·Î ´Ù ¸¥ ¾Ïȣȭ±â¹ýÀ» ¸»ÇÑ´Ù. Áï ŰÀ̰¡ ½ÖÀ¸·Î Á¸ÀçÇØ ÇÑÂÊÀ¸·Î ¾Ïȣȭ¸¦ ÇÏ¸é ´Ù¸¥ ŰÀ̷θ¸ º¹È£È­°¡ °¡´ÉÇÏ°Ô µÈ ´Ù. ÀϹÝÀûÀ¸·Î ºñ´ë ĪÇü ¾Ïȣȭ½Ã½ºÆÀÀ» ÀÌ¿ëÇÒ¶§ µÎ°³ÀÇ Å°ÀÌ °¡¿îµ¥ Çϳª´Â ÀϹݿ¡°Ô °ø°³Çϰí ÇϳªÀÇ Å°ÀÌ´Â ÀÚ ½Å¸¸ÀÌ ¾ÈÀüÇÏ°Ô º¸ °üÇÑ´Ù. À̶§ ÀϹݿ¡°Ô °ø°³µÈ ŰÀ̸¦ °¡Áö°í ÆÛºí¸¯Å°ÀÌ(Public Key)¶ó°íÇϰí, ÀÚ½ÅÀÌ °¡Áö°í ÀÖ ´Â ŰÀ̸¦ °³ÀÎŰ (Private Key)¶ó°í ºÎ¸¥´Ù.
¸¸ÀÏ ¿ÜºÎÀÇ ¾î¶² ´Ù¸¥ »ç¶÷ÀÌ ¾î¶² ÀÚ·á(M)¸¦ ³×Æ®¿÷À» ÅëÇØ ¾ÈÀüÇÏ°Ô Àü´ÞÇϱâ À§ÇØ ºñ´ëĪ Çü ¾Ïȣȭ ¾Ë°í¸®Áò À» »ç¿ëÇÑ´Ù°í ÇÒ¶§ ±×´Â ³ªÀÇ ÆÛºí¸¯Å°ÀÌ(Public Key)¸¦ ÀÌ¿ëÇØ ÀڷḦ ¾ÏÈ£È­ÇØ ¾ÏȣȭµÈ ÀÚ·á (C )¸¦ ³ª¿¡°Ô º¸³½´Ù. ³×Æ®¿÷»óÀÇ ´©±¸µµ ³ªÀÇ °³ÀÎŰ(Private Key)¾øÀÌ´Â ¾ÏȣȭµÈ ÀڷḦ ÇØµ¶ÇÒ¼ö ¾øÀ¸¹Ç·Î ¾ÈÀüÇÏ °Ô Àü´ÞµÈ´Ù. Àü´ÞµÈ ¾ÏȣȭµÈ ÀÚ·á´Â ³ª¸¸ÀÌ °¡Áø °³ÀÎŰ(Private Key)¸¦ ÀÌ¿ëÇØ º¹È£È­°¡ °¡´ÉÇϹǷΠ³ª¸¸ÀÌ ±× ¾Ï ȣȭµÈ ÀڷḦ ÇØµ¶ ÇØ¼­ ¿ø·¡ÀÇ ÀÚ·á(M)À» ¾òÀ»¼ö ÀÖ´Ù. À̰ÍÀÌ ÀϹÝÀûÀÎ ºñ´ëĪÇü ¾Ïȣȭ±â¹ýÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ´Ù. ±×·¡¼­ ºñ´ëĪÇü ¾Ïȣȭ±â¹ýÀ» ÆÛºí¸¯Å°ÀÌ(Public Key) ¾Ïȣȭ¹æ½ÄÀ̶ó°í Çϱ⵵ ÇÑ´Ù.
ºñ´ëĪÇü, ÆÛºí¸¯Å°ÀÌ ¾Ïȣȭ¹æ½ÄÀº ¿ª»çµµ ª°í °¡´ÉÇÑ ¾Ë°í¸®Áòµµ Àû´Ù. ¶Ç ´ëĪÇü ¾Ïȣȭ¾Ë °í¸®Áòº¸´Ù ó¸®¼Ó µµ°¡ ¸Å¿ì ´À¸®±â¶§¹®¿¡ Åë»óÀûÀ¸·Î ¸¹Àº ÀڷḦ ¾ÏȣȭÇϴµ¥´Â ÀûÇÕÇÏÁö ¾ÊÀº ¹æ¹ýÀ̶ó´Â ´ÜÁ¡ µµ ÀÖ´Ù. ºñ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®ÁòÀ¸·Î´Â

µîÀÌ ÀÖ´Ù.
ÀÌµé ¾Ë°í¸®Áò °¡¿îµ¥ Diffie-Hellman¹æ½Ä°ú RSA¾Ë°í¸®ÁòÀÌ °ÅÀÇ Ç¥ÁØÃ³·³ ¸¹ÀÌ »ç¿ëµÇ¾îÁö°í ÀÖ°í Æ¯È÷ RSA°¡ ÁÖ·Î »ç¿ëµÇ´Â ºñ´ëĪÇü ¾Ïȣȭ ±â¹ýÀÌ´Ù.

3.3 Message Diegest

¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ® ¾Ë°í¸®ÁòÀº ÀÚ·áÀÇ ³»¿ëÀÇ Ã¼Å©¼¶À» ±¸ÇϵíÀÌ ÀڷḦ ÇØ½¬Ã³¸®¸¦ ÇÑÈÄ °¢ ÀÚ ·á¿¡ ´ëÀÀµÇ´Â ÀÏÁ¤ ±æÀÌÀÇ ÇØ½¬¸¦ ±¸ÇÏ´Â ¾Ë°í¸®ÁòÀÌ´Ù. ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®´Â ÇØ´ç ÀÚ·á¿Í ÀÏ´ëÀÏ·Î ¸ÅÇÎÀÌ µÇ±â¶§ ¹®¿¡ ÀÚ·áÀÇ ³»¿ë À» Áõ¸íÇÒ¼ö ÀÖ´Â ÄÚµå·Î¼­ Ȱ¿ëµÈ´Ù. Áï ¾î¶² ÀÚ·á(M)À» ÇØ½¬ÇÔ¼ö¸¦ ÅëÇØ ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ±¸Çϸé ÇØ´ç ¸Þ½Ã Áö´ÙÀÌÁ¦½ºÆ®¸¦ ÀÌ¿ëÇØ ÀÚ·áÀÇ ¼öÁ¤/¼ø¼­º¯°æ/»èÁ¦/÷°¡µî ÀÚ·áÀÇ ÅëÇÕ¼ºÀ» üũÇÒ¼ö ÀÖ´Ù.
ƯÈ÷ ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÏ´Â ÇØ½¬ÇÔ¼ö´Â ´Ü¹æÇâÇØ½¬(One way Hash)ÇÔ¼ö·Î¼­ »ý¼ºµÈ ¸Þ½Ã Áö´ÙÀÌÁ¦½ºÆ®·ÎºÎÅÍ ¿ø ·¡ÀÇ ¸Þ½ÃÁö¸¦ Ãß·ÐÇÒ¼ö ¾ø´Â ÇØ½¬¸¦ »ç¿ëÇϱ⶧¹®¿¡ ¾ÈÀüÇÏ´Ù°í ÇÒ¼ö ÀÖ´Ù.

¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¿ë ¾Ë°í¸®ÁòÀ¸·Î´Â

µîÀÌ ¾Ë·ÁÁ® ÀÖ´Ù.

3.4 Digital Signature

ÀüÀÚ¼­¸í(Digital Signature)Àº ƯÁ¤ÇÑ ¾Ïȣȭ ¾Ë°í¸®ÁòÀº ¾Æ´Ï´Ù. ´Ù¸¸ À§¿¡¼­ ¾ð±ÞÇÑ ¾Ïȣȭ±â ¹ýµéÀ» ÀÀ¿ëÇÑ °Í °¡ ¿îµ¥ ÇϳªÀÌ´Ù. ´Ù¸¸ ÀüÀÚ¼­¸íÀÌ ÀϹÝÀûÀÎ º¸¾ÈÀÀ¿ë½Ã½ºÆÀÀÇ ±âº»ÀûÀÎ ¿ä¼Ò·Î °£ÁֵDZ⶧¹®¿¡ ÀÌ °÷¿¡¼­ ¾ð±ÞÇÏ·Á ÇÑ´Ù.
ÀüÀÚ¼­¸íÀ» À̾߱âÇÒ¶§ ÄÄÇ»ÅÍ ¿·¿¡ ÀüÀÚÆæ°ú ÆÐµå°¡ À־ ¾î¶² ÀÚ·á¿¡ ¼­¸íÀ» ÇÏ·Á¸é ÀÌ Ææ À» ÀÌ¿ëÇØ ÆÐµå¿¡ »çÀÎÀ» ÇÏ¸é ±× ¼­¸íÀÇ À̹ÌÁö°¡ µðÁöÅ»ÇüÅ·Π¹®¼­¿Í ÇÔ²² º¸°üµÇ´Â °ÍÀ» »ó»óÇÏ´Â »ç¶÷µéÀÌ ÀÖ ¾ú´Ù. ¶Ç ±×·± ºñ »ó½ÄÀûÀÎ ½Ã½ºÆÀÀ» ±¸ÇöÇÑ »ç·Êµµ ÀÖ´Ù. ±×·¯³ª ±× ¼­¸íÀ̹ÌÁö´Â µðÁöÅ»ÇüÅÂÀÇ ÀÚ·áÀ̱⠶§¹®¿¡ 100% ¶È°°ÀÌ º¹Á¦ °¡ °¡´ÉÇÏ´Ù´Â »ç½ÇÀ» ÀØÁö ¸»¾Æ¾ßÇϸç Á¾ÀÌ¿¡ ¼­¸íÇÑ °Íº¸´Ù ´õ À§ÇèÇÑ ¹æ½ÄÀÌ´Ù.
ÀüÀÚ¼­¸íÀº ¾Õ¿¡¼­ ¾ð±ÞÇÑ ±×·± °ÍÀÌ ¾Æ´Ï´Ù. ÄÄÇ»Åͻ󿡼­ µðÁöÅ» ÇüÅ·ΠÀÌ·ç¾îÁö´Â ÀüÀÚ¼­ ¸íÀÇ ±âº»ÀûÀÎ ¾ÆÀÌ µð¾î´Â ÀÚ·áÀÇ ³»¿ëÀÇ ¼öÁ¤/º´°æÀ» Áõ¸íÇÒ¼ö ÀÖ´Â ¹æ¹ý(¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®µî)°ú ¸Þ½ÃÁöÀÇ »ý¼ºÀÚ ¸¦ È®ÀÎÇÒ¼ö ÀÖ´Â ¹æ ¹ý(ºñ´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀÇ °³ÀÎ۸¦ ÀÌ¿ëÇØ ¾ÏȣȭÇϴµî)À» ¼¯¾î¼­ ¼­¸íÀÇ È¿°ú¸¦ ³»´Â Àü ÀÚÀûÀÎ ¹æ¹ýÀÌ´Ù.


ÀüÀÚ¼­¸íÀÇ È帧

ÀüÀÚ¼­¸íÀÇ ±âº»ÀûÀÎ È帧Àº ´ÙÀ½°ú °°´Ù.

¼Û½ÅÀÚÃø
  1. ÀڷḦ »ý¼ºÇÑ´Ù.
  2. ÀÚ·áÀÇ ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÑ´Ù
  3. ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ÀÚ½ÅÀÇ °³ÀÎŰ(Private key)·Î ¾ÏÈ£È­ÇØ ÀÚ·á¿¡ µ¡ºÙÀδÙ.

¼ö½ÅÀÚÃø

  1. ¼ö½ÅÇÑ ÀÚ·áÀÇ ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÑ´Ù.
  2. ¼ö½ÅÇÑ ÀÚ·á¿¡ µ¡ºÙ¿©¿Â ¾ÏȣȭµÈ ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ¼Û½ÅÀÚÀÇ ÆÛºí¸¯Å°À̷ΠǬ ´Ù.
  3. ÀÚ·á·ÎºÎÅÍ ±¸ÇÑ ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¿Í µ¡ºÙ¿©¿Â ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ºñ±³ÇÑ´Ù.
  4. ºñ±³ÇÑ ´ÙÀÌÁ¦½ºÆ®°¡ °°À¸¸é ¸Þ½ÃÁö°¡ ¼Û½ÅÀÚ°¡ º¸³½°Í°ú ÀÚ·áÀÇ ³»¿ëÀÌ ¼öÁ¤µÇÁö ¾ÊÀº °ÍÀÌ Áõ¸íµÈ ´Ù.

3.5 ¾Ïȣȭ ¾Ë°í¸®Áò°ú ŰÀ̱æÀÌ

¾ÏÈ£¾Ë°í¸®ÁòÀÇ ¾ÈÀüµµ¸¦ üũÇÏ´Â ÀÌ·ÐÀº ¿©·¯°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î ¸¹ÀÌ ¾Ë·Á Áø ¾Ë°í¸®ÁòµéÀº ¼öÇÐÀûÀ¸·Î´Â ¾ÈÀüµµ°¡ È®º¸µÈ ¾Ë°í¸®ÁòÀÌ´Ù. ±×·¯³ª ±×·± ¾Ë°í¸®Áòµµ »ç¿ëÇϴ ŰÀÇ ±æÀÌ¿¡µû ¶ó ¿À´Ã³¯ »ç¿ëÇϱ⠿¡ ÀûÇÕÇѰ¡ À§ÇèÇѰ¡¸¦ È®ÀÎÇÑ´Ù.
ŰÀÇ ±æÀ̸¦ °¡Áö°í ¾Ë°í¸®ÁòÀÇ ¾ÈÀüµµ¸¦ À̾߱âÇÏ´Â °ÍÀº Brute-force attack¿¡ ´ëºñÇÑ ³íÀÇÀÌ ´Ù. Brute-force attackÀº °¡´ÉÇÑ ¸ðµç ۸¦ °¡Áö°í ÀڷḦ º¹È£È­ÇØ º¸´Â ¹æ¹ýÀÌ´Ù. ÄÄÇ»ÆÃÆÄ¿ö°¡ ³ôÁö¸øÇß´ø 1970³â´ë /80³â´ë¿¡¼­´Â ÀÌ ¹® Á¦°¡ Å« ¹®Á¦°¡ µÇÁö ¸øÇß´Ù. ±×·¯³ª 90³â´ë·Î µé¾î¿Í¼­ ÄÄÇ»ÆÃÆÄ¿ö°¡ Áõ°¡µÈ ¿À´Ã³¯¿¡´Â À¢¸¸ÇÑ ±æÀÌÀÇ Å°¿¡ ´ëÇØ ¼­´Â ªÀº ½Ã°£³»¿¡ ¸ðµç °¡´ÉÇÑ Å°À̸¦ ´Ù Å×½ºÆ®ÇØ º¼¼ö ÀÖ´Â Á¤µµ·Î ŰÀÇ ±æÀ̰¡ Áß¿äÇÑ ¿ä¼Ò °¡ µÇ¾ú´Ù. ¿¹¸¦ µé¸é ŰÀÇ ±æÀ̰¡ 8bit¶ó¸é 28 °³ Áï 256°³ÀÇ °¡´ÉÇÑ Å°°¡ ÀÖÀ»¼ö ÀÖ´Ù. 256°³ÀÇ °¡´ÉÇÑ 8bitÂ¥¸® ŰÀ̸¸À» Å×½ºÆ®ÇÏ ¸é ±× °¡¿îµ¥ Çϳª´Â ¿ÇÀº ۰¡ ÀÖÀ» °ÍÀÌ´Ù. ¸¸ÀÏ Å°À̰¡ 64bit±æÀÌÀ̸é 264 °³ÀÇ °¡´ÉÇÑ Å°À̰¡ ÀÖÀ»¼ö ÀÖ´Ù. À̶§ ´Â ¸¸ÀÏ 1ÃÊ¿¡ ¹é¸¸°³ÀÇ Å°À̸¦ üũÇÒ¼ö ÀÖ´Â ¼öÆÛÄÄÇ»ÅͰ¡ ÀÖ´Ù¸é Æò±Õ 2285³â°£ °è»êÇØ¾ß ¿Ç Àº ۸¦ ãÀ»¼ö ÀÖ À» °ÍÀÌ´Ù. ¸¸ÀÏ Å°ÀÌÀÇ ±æÀ̰¡ 128bitÀ̶ó¸é 1025 ³âÀÌ °É¸± °ÍÀÌ´Ù. ¿ìÁÖÀÇ ³ªÀ̰¡°¡ 1010 ³âÀÌ ¶ó°í Çϴϱî ÀÌ ±â°£ Àº Á¤¸» ±ä ±â°£À̶ó°í ÇÒ¼ö ÀÖ°Ú´Ù.
±×·¸´Ù¸é ´ëÇ¥ÀûÀÎ ¾Ïȣȭ ¾Ë°í¸®ÁòÀÎ DES¸¦ °¡Áö°í À̾߱âÇØ º¸ÀÚ. DES´Â 8byteÀÇ Å°À̸¦ »ç ¿ëÇÏÁö¸¸ 64bitÀüü ¸¦ ŰÀÌ·Î »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó 8bit´Â üũ¼¶¿ëÀ¸·Î »ç¿ëÇϰí 56bit¸¸À» ŰÀÌ·Î »ç¿ëÇÑ´Ù. Áï DESÀÇ Å°ÀÌÀÇ ±æÀÌ ´Â 56bitÀÌ´Ù. 1993³â 1994³â¿¡ Michael Wiener(Aplied Cryptography Second Edition P153)´Â 1 ¹é¸¸ ´Þ·¯Â¥¸® DESÀü¿ë ¹ÝµµÃ¼¸¦ ¸¸µé¸é Æò±Õ 3.5½Ã°£À̸é DES۸¦ ãÀ»¼ö ÀÖ´Ù´Â ¹ßÇ¥¸¦ ÇÑ ÀûÀÌ ÀÖ´Ù.
ºñ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®ÁòÀÇ Å°ÀÌ ±æÀÌ´Â ¾Õ¿¡¼­ ¸»ÇÑ ´ëĪÇü ¾Ïȣȭ±â¼úÀÇ Å°ÀÇ ±æÀÌ¿Í Á» ´Ù ¸£´Ù. ºñ´ëĪÇü ¾Ï ȣȭ ¾Ë°í¸®ÁòÀº Å« ¼Ú¼ö°è»êµî¿¡ ÀÇÁ¸Çϱ⶧¹®¿¡ ´ëĪÇü ¾Ïȣȭ±â¼ú°ú´Â ´Ù¸¥ ÄÄÇ»ÆÃ ÆÄ¿ö¸¦ ¿ä ±¸Çϸç ÀϹÝÀûÀ¸·Î RSA¾Ë°í¸®ÁòÀÇ °æ¿ì 512bit RSAŰÀÌ´Â »ó¾÷ÀûÀ¸·Î »ç¿ëÇÏ´Â ¾Ïȣȭ±â¼ú¿¡´Â ÀûÇÕÇÏÁö ¾Ê´Â °Í À¸·Î ¾Ë·ÁÁ® ÀÖ°í ÃÖ ¼ÒÇÑ 768bitÀÌ»ó ±æÀÌÀÇ Å°À̸¦ »ç¿ëÇÒ °ÍÀ» ±ÇÇϰí ÀÖ´Ù.
Bluce Schneier(Aplied Cryptography Second Edition, P162, P 167)°¡ Á¦¾ÈÇϴ ŰÀÇ ±æÀÌ´Â ´Ù À½°ú °°´Ù.

* ºñ´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀÇ ±ÇÀå ۱æÀÌ
³âµµ
°³ÀÎÀû ¿ëµµ»ç¿ë±â¾÷ÀÇ »ç¿ë Á¤ºÎ/±º
1995³â
768 12801536
2000³â
1024 12801536
2005³â
1280 15362048
2010³â
1280 15362048
2015³â
1536 20482048

* ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®ÁòÀÇ ±ÇÀå ۱æÀÌ
»ç¿ë ¿ëµµÀ¯È¿±â°£ÃÖ¼ÒÇÑÀÇ Å°±æÀÌ
±º Á¤º¸ºÐ/½Ã°£56-64bit
Á¦Ç°¾È³»/´º½º/ȸ»çÇÕº¡µîÀÏ/ÁÖ 64bit
Àå±âÀûÀÎ ±â¾÷ÀÇ °è¾àµî³â 64bit
¹«¿ª ±â¹Ð10³â112bit
ÇÙÆøÅº ºñ¹Ð40³âÀÌ»ó 128bit
øº¸¿øÀÇ ½ÅºÐºñ¹Ð¹øÈ£50³âÀÌ»ó 128bit
°³ÀÎÀûÀÎ ºñ¹Ð50³âÀÌ»ó 128bit
Á¤ºÎ ´ë»ç°ü ¾÷¹«65³âÀÌ»ó Àû¾îµµ 128bitÀÌ»ó
Á¤ºÎ ºñ¹Ð100³â Àû¾îµµ 128bitÀÌ»ó

¹Ì±¹Á¤ºÎ´Â ¾Ïȣȭ±â¼úÀ» ¹«±âÀÇ ÀÏÁ¾À¸·Î °£ÁÖÇϱ⶧¹®¿¡ ¿ÜºÎ·ÎÀÇ ¼öÃâÀ» ±ÝÁöÇϰí ÀÖ´Ù. ÀÌ Á¦ÇÑÀº ITAR(International Traffic in Arms Regulations)¹ýÀ¸·ÎºÎÅÍ Á¦ÇÑÀ» ¹Þ´Â´Ù. ÀÌ Á¦ÇÑÀº 1940³â ´ë ³ªÅä(NATO)ÀÇ CoCom(Coordinating Committee for Multilateral Export Control)À¸·ÎºÎÅÍ ÆÄ»ýµÈ Á¦ÇÑÀÌ´Ù. ¹Ì ±¹³»¿¡¼­µµ ÀÌ Á¦ÇÑÀÌ Çå¹ý ÀÇ À§¹è¿©ºÎ¸¦ °¡¸®´Â ÀÛ¾÷µµ ÁøÇàÁßÀÌ¸ç ¿©·¯°¡Áö ³íÀïÀÌ ÀÖ±äÇÏÁö¸¸ ¾ÆÁ÷ ITARÁ¦ÇÑÀ¸·Î ¹Ì±¹ ¿¡¼­ ¸¸µé¾îÁö´Â ¸ð µç ¾Ïȣȭ ±â¼ú/Àåºñ/¼ÒÇÁÆ®¿þ¾î´Â ¾àÇÑ ¾Ïȣȭ ±â¼úÀÎ 40bit±æÀÌÀÌÇÏÀÇ Å°/512bitÀÌÇÏÀÇ RSAŰ À̸¦ °¡Áø ¾ÏȣȭÀå ºñ/¼ÒÇÁÆ®¿þ¾î¸¸À» ¼öÃâÇÒ¼ö ÀÖ°Ô µÇ¾î ÀÖ´Ù. ÀÌ ±ÔÁ¤Àº ¾Ïȣȭ ¹æ½ÄÀÌ bulk encryptionÀÌ³Ä ¾Æ ´Ï³Ä¿¡ µû¶ó ¾à°£ÀÇ ¿¹¿Ü´Â ÀÖ±äÇÏÁö¸¸ ¹Ì±¹Á¤ºÎÀÇ ±î´Ù·Î¿î ½É»ç¶§¹®¿¡ ¼öÃâÇã¿ëÀÌ ¸Å¿ì ¾î·Á¿ì¸ç ½Ã½ºÆÀÀÇ Àüü ¼Ò ½ºÄÚµå¿Í ÇÔ²² ¼ö ÃâÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÑ »óÅÂÀÌ´Ù.
¾Ïȣȭ ±â¼úÀÇ ¼öÀÔ°ú °ü·ÃµÈ ÀǰßÀ¸·Î º»ÀÎÀÌ WSP(Web Security and Payment)¸ÞÀϸµ¸®½ºÆ® ¿¡ º¸³½ ªÀº ¸ÞÀÏÀ» ÇÏ ³ª ¼Ò°³ÇÑ´Ù.


X-Sender: dgguen@164.124.5.1
Date: Wed, 02 Oct 1996 10:45:12 +0900
To: wsp@cre.co.kr
From: Douglas Guen 
Subject: ¹Ì±¹ÀÇ ¾Ïȣȭ ¼öÃâ °ü·Ã º¯°æ¿¡ ´ëÇØ

±Çµµ±ÕÀÔ´Ï´Ù.
¿À´Ã ·ÎÀÌÅͰø±Þ±â»ç·Î ÇѰܷ¹¿¡ ÀÛÀº ±â»ç·Î ¹Ì±¹ÀÇ "¾Ïȣȭ¼öÃâÇã¿ë"À̶ó´Â
±â»ç°¡ ³ª¿Í¼­ ³»¿ëÀ» ã¾Æ º»°ÍÀÔ´Ï´Ù.
¿ä¾àÇϸé,
           64bit۱æÀÌÀÇ ¾Ïȣȭ ¼öÃâÇã¿ë
           ´ë½Å key escrowÁ¤Ã¥À» ¼ö¿ëÇØ¾ßÇÔ.
           (Áï Á¦ 3ÀÚ°¡ Ç®¼ö ÀÖ´Â ¾ÏÈ£±â¼ú¸¸À» Çã¿ëÇÑ´Ù´Â ±âÁ¸ÀÇ Á¤Ã¥°í¼ö)
        
º° »õ·Î¿î À̾߱â´Â ¾Æ´ÑµíÇÕ´Ï´Ù.

¾Ïȣȭ±â¼úÀÇ ¼öÃâÀ̶óÇÒ¶§ ¿©ÀüÈ÷ ´øÁ®¾ßÇÒ check point´Â
        1. ¾Ë°í¸®ÁòÀÇ ¼³°è°¡ ¾ÈÀüÇÑÁö Áõ¸íÇÒ¼ö Àִ°¡?
           (DES¿Í °°ÀÌ trapdoorÀÇ Á¸Àç¿¡ ´ëÇÑ ÀǽÉÀÌ Àִ°¡?)
        2. ¼ÒÇÁÆ®¿þ¾î/Çϵå¿þ¾îÀÇ Full Source¸¦ ÀÔ¼öÇÒ ¼ö Àִ°¡?
        3. Key ±æÀÌ Á¦¾î°¡ °¡´ÉÇѰ¡?
µîµîÀÔ´Ï´Ù.
¿©ÀüÈ÷ ÀÌ·± °üÁ¡¿¡¼­´Â ¹Ì±¹¿¡¼­ ¼öÃâµÇ´Â ¾Ïȣȭ±â¼ú/Àåºñ/¼ÒÇÁÆ®¿þ¾î´Â 0Á¡
À̶ó ÇÒ¼ö ÀÖ°ÚÁö¿ä?

4. ¾Ïȣȭ ¶óÀ̺귯¸®

Áö±Ý±îÁö ¼­·ÐÀÌ ³Ê¹« ±æ¾ú´Ù. ¾Ïȣȭ ±â¼úÀü¹Ý¿¡ ´ëÇÑ ¼Ò°³°¡ ³Ê¹« ÀåȲÇßÁö¸¸ ÀÌ·± ¹è°æ¿¡¼­ ¾Ïȣȭ ÇÁ·Î±×·¡ ¹ÖÀÌ Àǹ̸¦ °¡Áú°Í °°¾Æ¼­ ºñ±³Àû »ó¼¼È÷ ¼³¸íÀ» ÇÏ¿´´Ù. ÁÁ´Ù ¾Ïȣȭ ¹æ½ÄÀº ´ëĪÇü/ºñ´ëĪÇü ÀÌ ÀÖ°í, ÇØ½ÃÇÔ¼ö, ÀüÀÚ¼­¸íµîÀÌ ÀÖ´Ù´Â °ÍÀº Àß ¾Ë¾Ò´Ù. ±×¸®°í ±×°ÍÀ» ÀÌ¿ëÇØ º¸¾È ÀÀ¿ë½Ã½ºÆÀ, Secure TelnetµîÀ» ¸¸µé¼ö ÀÖ´Ù´Â °Íµµ ¾Ë¾Ò´Ù. ±×·±µ¥ ¹®Á¦´Â ±×·¸´Ù¸é ±×·± ¾ÏÈ£ÀÌ·ÐÀ» ½ÇÁ¦ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ¸·Î ¿¬°áÇÏ·Á¸é ÀÌ·Ð/¾Ë °í¸®ÁòÀ» ÇÁ·Î±×·¥È­ ÇÏ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù. ±×·¯³ª ÀÌ ÀÛ¾÷Àº ±×¸® ½±Áö¾Ê´Ù. ¾Ë°í¸®ÁòÀÌ ÀÖ´ÙÇÏ´õ¶óµµ ±×°ÍÀ» ±¸ÇöÇÏ ´Â ÀÛ¾÷Àº ÀϹÝÀû ÀÎ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °Í°ú´Â ´Þ¸® ¸Å¿ì ±î´Ù·Ó°í º¹ÀâÇÑ ÀÏÀÌ µÈ´Ù. ÀÌ ÀÚ¸®¿¡¼­´Â ¾î¶² ¼öÇÐ ÀûÀÎ ¾Ë°í¸®ÁòÀ» ±¸ ÇöÇÏ´Â °Í¿¡ ÁýÁßÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±×·± ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÑ ¶óÀ̺귯¸®°¡ ÀÖ´Ù°í ÇÒ¶§ ±× ¶óÀÌºê ·¯¸®¸¦ ÀÌ¿ëÇØ ÀÀ ¿ë½Ã½ºÆÀÀ» ¸¸µå´Â °÷¿¡ ÁýÁßÇÏ·Á°í ÇÑ´Ù. ±×·¯ÀÚ¸é »ç¿ëÇÒ ¶óÀ̺귯¸®°¡ ÀÖ¾î¾ßÇϴµ¥ ±×°ÍÀº ´ÙÀ½°ú °°´Ù.

4.1 RSAEURO/RSAREF

RSAEURO/RSAREF´Â °ÅÀÇ µ¿ÀÏÇÑ »ç¿ëÀÚ ÀÎÅÍÆÐÀ̽º¸¦ °¡Áö°í ÀÖ´Â ¾Ïȣȭ ¶óÀ̺귯¸®ÀÌ´Ù. ±âº»ÀûÀ¸·Î RSAREF ´Â ¹Ì±¹ÀÇ RSA»ç°¡ ÆÛºí¸¯µµ¸ÞÀÎÀ¸·Î RSA¾Ë°í¸®Áò, DES, MD5µîÀÇ ¾Ë°í¸®ÁòÀ» CÄÚµå·Î ±¸Çö ÇØ¼­ °ø°³ÇÑ ¶óÀÌºê ·¯¸®ÀÌ´Ù. ¹öÁ¯Àº ÇöÀç 94³âµµ¿¡ ¹ßÇ¥µÈ 2.0À¸·Î¼­ ÀϹÝÀûÀÎ ¾Ïȣȭ ¾Ë°í¸®ÁòÀº »ç¿ëÇÒ¼ö ÀÖ°Ô µÇ¾î ÀÖ´Ù. RSA »ç´Â RSAREF 2.0ÀÌÈÄ Áö¼ÓÀûÀÎ ¹ßÀüÀ» Áß´ÜÇϰí BSAFEµî »õ·Î¿î ¾Ïȣȭ °³¹ßµµ±¸¸¦ °³¹ßÇØ ÀÌ ÂÊÀ¸·Î ÁýÁßÀ» ÇÏ °í ÀÖÀ¸¸ç RSAREF´Â ¹ßÀüÀ» ÇÏÁö ¸øÇϰí ÀÖ´Â »óÅÂÀÌ´Ù. RSAREFÀÇ API(Application Programming Interface)´Â ¸Å¿ì ¸í·áÇÏ°í °£´ÜÇØ¼­ ¾ÏȣȭÀÀ¿ë½Ã½ºÆÀÀ» °³¹ßÇϴµ¥ ½±°Ô Àû¿ëÇÒ¼ö ÀÖµµ·Ï µÇ¾îÀÖ´Ù. ±×·¯³ª ºÒ ÇàÇϰԵµ RSAREF ³ª BSAFEµîÀº ¹Ì±¹³»ÀÇ RSA»ç°¡ °³¹ßÇÑ ¾Ïȣȭ°³¹ßµµ±¸·Î¼­ ¹Ì±¹¹Û¿¡¼­ÀÇ »ç¿ëÀº ÀüÀûÀ¸·Î ºÒ °¡´ÉÇÑ »óÅÂÀÌ´Ù.
RSAEURO´Â 95³âºÎÅÍ °³¹ßµÈ ¾Ïȣȭ °³¹ßµµ±¸·Î¼­ ÇöÀç 1.03, 1.05¹öÁ¯µîÀÌ ³ª¿À°í ÀÖ´Ù. RSAEUROÀÇ Æ¯Â¡Àº RSAREF¿Í °ÅÀÇ ¿Ïº®ÇÏ°Ô È£È¯¼ºÀ» À¯ÁöÇϸ鼭 ±âŸ ¿©·¯°¡Áö ±â´ÉµéÀ» Ãß°¡ÇÑ ¾Ïȣȭ°³¹ß µµ ±¸ÀÌ´Ù. ´Ù¸¸ RSAEURO´Â À¯·´, ¿µ±¹¿¡¼­ °³¹ßµÈ ¾Ïȣȭ¶óÀ̺귯¸®À̱⶧¹®¿¡ ¹Ì±¹ÀÇ ¼öÃâ±ÝÁö¹ý¿¡ Àû¿ëÀ» ¹ÞÁö ¾Ê°í ¹Ì±¹¹Û¿¡ ¼­ »ç¿ëÀÌ °¡´ÉÇÏ´Ù´Â Á¡ÀÌ ÀÖ´Ù. ±×·¯³ª RSAEURO´Â ¹Ì±¹¹Û¿¡¼­´Â »ç¿ëÀÌ °¡´ÉÇÏÁö¸¸ »ó¿ëÀÌ ¸ç, ¹Ì±¹³»¿¡¼­ »ç ¿ëÇÏ·Á¸é ¹Ì±¹ RSA»çÀÇ ¶óÀ̼¾½º¸¦ ¾ò¾î¾ßÇÑ´Ù. ÀÌ ¹®Á¦´Â ¸ðµç RSA°ü·Ã ¾Ïȣȭ¶óÀ̺귯¸®¿¡ °øÅëÀûÀ¸·Î Àû¿ëµÇ ´Â ¹®Á¦À̱⵵ ÇÏ´Ù.
RSAEURO/RSAREF´Â ¸Å¿ì ½±°í ¸íÄèÇÑ API¸¦ °¡Áö°í Àֱ⶧¹®¿¡ ¾Æ·¡ÀÇ ÇÁ·Î±×·¡¹Ö¹æ¹ý¿¡¼­ ´Â À̸¦ Áß½ÉÀ¸·Î ¼³ ¸íÇÏ·Á°í ÇÑ´Ù.

4.2 SSLeay

SSLeay È£ÁÖÀÇ E A Young¿¡ ÀÇÇØ ¸¸µé¾îÁø SSL 2.0 ¶óÀ̺귯¸®ÀÌ´Ù. SSLeay´Â ÀüÀûÀ¸·Î SSLÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇÏ ±âÀ§ÇØ ¸¸µç °ÍÀÌÁö¸¸ ±× ¼Ó¿¡ crypto.a¶ó´Â ¶óÀ̺귯¸®¸¦ »ý¼ºÇϸç ÀÌ ¼Ó¿¡´Â ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¾Ï ȣȭ ¾Ë°í¸®ÁòÀÌ ´ë ºÎºÐ Æ÷ÇԵǾî ÀÖ´Ù. ±×·¯³ª SSLeay´Â SSLÇÁ·ÎÅäÄÝÀ» À§ÇØ ¸¸µç ÆÐŰÁö·Î¼­ SSL API´Â ºñ±³ Àû ¸íÈ®ÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖµµ·Ï µÇ¾îÀÖÀ¸³ª ±× ÇϺÎÀÇ ¾Ïȣȭ ¾Ë°í¸®Áò¿¡ ´ëÇÑ API´Â ¹®¼­È­³ª ¼³¸íÀÌ ÃæºÐÄ¡ ¸øÇؼ­ SSLÀÌ¿ÜÀÇ ¾Ïȣȭ ½Ã½ºÆÀÀ» ¸¸µé±â À§Çؼ­´Â »ó´çÇÑ ³ë·ÂÀ» ÇØ¾ß °¡´ÉÇÏ´Ù.

4.3 PGP

°ø°³µÈ ¾Ïȣȭ ½Ã½ºÆÀÀ¸·Î ¿ª»ç°¡ °¡Àå ±íÀº °ÍÀº ¹¹¶óÇØµµ PGPÀÌ´Ù. PGP´Â ÃʱâºÎÅÍ ¼Ò½ºÃ¤ ·Î °ø°³µÇ¾îÀÖ¾ú°í, ¹Ì±¹ ¹ÛÀ¸·Î À¯ÃâµÇ¸é¼­ Àü¼¼°èÀûÀΠǥÁØ ÀüÀÚ¿ìÆí ¼ÒÇÁÆ®¿þ¾î·Î ÀÚ¸®ÀâÀº ½Ã½ºÆÀÀÌ´Ù. ÀÌ ¼Ó¿¡ ¿ª½Ã RSA, IDEA, MD5µî ¾Ïȣȭ ¾Ë°í¸®ÁòÀÌ ±¸ÇöµÇ¾î ÀÖ°í, À̰ÍÀ» ±â¹ÝÀ¸·Î ¾Ïȣȭ ÀüÀÚ¿ìÆí, PGP¸¦ ¸¸µé¾ú´Ù. ±×·¯³ª PGPÀÇ ¾à Á¡Àº ¾Ïȣȭ¶óÀ̺귯¸®¿Í ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ±¸ºÐµÇ¾î ÀÖÁö¾Ê°í ÇѲ¨¹ø¿¡ ¼¯¿©¼­ ±¸ÇöµÇ¾î ÀÖ°í ÀÌ ÀÇ ºÐ·®ÀÌ ÀÛÁö¾Ê±â ¶§¹®¿¡ PGP³»¿¡¼­ ¾Ïȣȭ¶óÀ̺귯¸®¸¦ ºÐ¸®Çؼ­ »ç¿ëÇÑ´Ù´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇÑ °Íó·³ ¾Ë·ÁÁ® ÀÖ´Ù. MIT¹öÁ¯ÀÇ PGP´Â RSAREF¸¦ »ç¿ëÇÏ´Â ¹öÁ¯ÀÇ PGP°¡ ÀÖ°í RSAEURO¹öÁ¯ÀÇ PGP°¡ ÀÖ±äÇÏÁö¸¸ PGP³»ÀÇ ¾Ïȣȭ¶óÀ̺귯¸® ¸¦ ºÐ¸®ÇÏ´Â °ÍÀº ¸Å¿ì Èûµç °ÍÀ¸·Î ¾Ë·ÁÁ®ÀÖ´Ù. ´Ù¸¸ 96³â 7¿ù ¹Ì±¹¿¡¼­ ¿­¸° 6ȸ USENIX Security ½ÉÆ÷Áö¿ò¿¡¼­ SUN»ç¿¡¼­ PGP¶óÀ̺귯¸®¸¦ ¸¸µé°í ÀÖ´Ù´Â ¹ßÇ¥°¡ ÀÖ±äÇßÁö¸¸ °ø°³°¡ µÉÁö ¿©ºÎ´Â ¾Ë·ÁÁöÁö ¾Ê¾Ò´Ù.

4.4 JAVA Crypto

JAVA¿¡¼­ ¾Ïȣȭ¶óÀ̺귯¸®¸¦ ±¸ÇöÇÏ´Â °ÍÀº ÃÖ±ÙÀÇ À¯Çàó·³ ¹øÁö°í ÀÖ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ÀÚ¹Ù·Î ¸¸µé¾îÁø ¾Ï ȣȭ¶óÀ̺귯¸®´Â Native method¸¦ »ç¿ëÇØ¼­ ³»ºÎÀÇ ¼öÇÐÀûÀÎ °è»êÀº CÄÚµå·Î ±¸ÇöÇϰí ÇÔ¼ö¸¸ À» ÀÚ¹Ù·Î ¸¸µå´Â ¹æ ½ÄÀ» ÃëÇϰí ÀÖ´Ù. ±×·¯³ª ÇöÀç ÀÚ¹Ù¸¦ »ç¿ëÇÏ´Â ºê¶ó¿ìÁ®ÀÇ ÀÚ¹Ù ¾ÖÇø´Àº Native method¸¦ »ç ¿ëÇÒ¼ö ¾ø±â¶§¹®¿¡ Å« Àǹ̰¡ ¾ø´Ù. ÃÖ±Ù ÀüÀûÀ¸·Î Àڹٷθ¸ ¾Ïȣȭ ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÏÀÚ´Â ³íÀǰ¡ ÀÖ°í ÇöÀç DES Á¤µµ´Â ÀüÀûÀ¸·Î Àڹٷθ¸ ±¸ÇöµÈ Ŭ·¡½º°¡ ¼±º¸À̱ä ÇÏÁö¸¸ ¾ÆÁ÷Àº ÀüÀûÀ¸·Î ÀÚ¹Ù·Î ´ëºÎºÐÀÇ ¾Ïȣȭ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÑ ½Ã½ºÆÀÀº ¾ø´Ù.
Native method·Î ±¸ÇöµÈ Àڹ٠Ŭ·¡½º·Î´Â Systemics»çÀÇ cryptix-java 1.1ÀÌ ÀÖ´Ù. ACME Java Ŭ·¡½º¿ª½Ã CryptoŬ·¡½º ¸¦ ±¸ÇöÇØ ³õ°í ÀÖ´Ù.

5. ¾Ïȣȭ ÇÁ·Î±×·¡¹Ö - RSAEURO/RSAREFÁß½ÉÀ¸·Î

ÀÌÁ¦ ÁøÂ¥ ¾Ïȣȭ ÇÁ·Î±×·¡¹ÖÀ¸·Î Á¢¾îµé¾ú´Ù. RSAEURO 1.03¹öÁ¯À» Áß½ÉÀ¸·Î ¾Õ¿¡¼­ À̾߱â ÇÑ °¢°¢ÀÇ ¾Ïȣȭ ¹æ ½ÄÀ» ÇÁ·Î±×·¡¹ÖÀ¸·Î ¾î¶»°Ô ±¸ÇöÇÏ´ÂÁö¸¦ ¼³¸íÇϰڴÙ.

5.1 Symmetric Cryptography Programming

´ëĪÇü ¾Ïȣȭ ÇÁ·Î±×·¡¹ÖÀº ¾Õ¿¡¼­ ¾ð±ÞÇßµíÀÌ ¾ÏȣȭÇÒ¶§ÀÇ Å°¿Í ¾Ïȣȭ¸¦ Ç®¶§ »ç¿ëÇϴ Ű °¡ µ¿ÀÏÇÑ Å°¸¦ »ç ¿ëÇÏ´Â ¾Ïȣȭ ¹æ½ÄÀ» ¸»ÇÑ´Ù. ´ëÇ¥ÀûÀÎ ´ëĪÇü ¾Ïȣȭ ¹æ½ÄÀº ¹Ù·Î DES(Data Encryption Standard)ÀÌ´Ù. DES´Â ºí ·° ¾Ïȣȭ ¹æ½ÄÀ¸·Î¼­ ºí·° ¾Ïȣȭ ¹æ½ÄÀº µ¿ÀÏÇÑ ¾Ïȣȭ ¹æ½Ä¿¡¼­µµ µ¿ÀÛÇÏ´Â ¸ðµå°¡ °¢°¢ ´Ù¸¥ ¸ðµå·Î µ¿ÀÛÇÒ ¼ö ÀÖ´Ù.

 
        ECB(Electronic CodeBook)
        CBC(Cipher Block Chaining)
µîÀÌ ´ëÇ¥ÀûÀÎ ºí·°¾Ïȣȭ ¹æ½ÄÀÇ ¸ðµåÀ̸ç À̵éÀÇ º¯ÇüÀÌ ÀÖÀ»¼ö ÀÖ´Ù.
RSAEURO°¡ Áö¿øÇÏ´Â ºí·°¾Ïȣȭ¹æ½ÄÀº ÇöÀç DESÀ̸ç IDEA, Blowfish¾Ïȣȭ°¡ °ð Áö¿øµÈ´Ù °í ÇÑ´Ù. RSAEURO °¡ Áö¿øÇÏ´Â DES¿ª½Ã ÀÌ·± ºí·°¾Ïȣȭ ¸ðµå¸¦ »ç¿ëÇϴµ¥ ¿©±â¼­´Â ´ëÇ¥ÀûÀÎ CBC¸ðµå¸¦ »ç¿ë ÇÑ´Ù. ECB¸ðµå´Â ¿À ·¡µÈ ¹æ½ÄÀÌ¸ç ±¸ÇöÇϱ⵵ ¾î·Æ°í attackÀÇ °¡´É¼ºÀÌ ÀÖ´Â °ÍÀ¸·Î ¾Ë·ÁÁ® ÀÖ´Ù. DES´Â Àß ¾Ë·Á Á® ÀÖ´Â ´ë·Î 56bit Ű ±æÀ̸¦ °¡Áö´Â ¾Ïȣȭ¹æ½ÄÀ¸·Î¼­ 56bitÀÇ Å° ±æÀÌ´Â ÀÌÁ¦´Â ¾ÈÀüÇÏ´Ù°í ÇÒ ¼ö ¾ø´Â Ű ±æÀ̰¡ µÇ¾î ¹ö·È´Ù. ±×·¡ ¼­ ÃÖ±Ù¿¡´Â DES¾Ïȣȭ¸¦ ¼¼°³ÀÇ Å°·Î ¼¼¹ø ¹Ýº¹ÇÔÀ¸·Î½á ¾ÏÈ£ÀÇ °­µµ¸¦ ³ôÀÎ Triple-DES¹æ½Ä À» ¸¹ÀÌ ÀÌ¿ëÇÑ´Ù. Triple-DES´Â Key1À¸·Î ¾Ïȣȭ¸¦ Çϰí Key2·Î º¹È£È­¸¦ ÇÑ ÈÄ ´Ù½Ã Key3·Î ¾Ïȣȭ¸¦ ÇÏ´Â ¹æ ½ÄÀÌ´Ù. ±×·¯³ª Key1 °ú Key3¸¦ µ¿ÀÏÇÑ Å°¸¦ »ç¿ëÇÑ´Ù. ±×·¯¹Ç·Î ÀüüÀûÀ¸·Î »ç¿ëÇϴ ŰÀÌ´Â µÎ°³ Áï Key1°ú Key2 ·Î¼­ µÎ°³ÀÇ Å°¸¦ ÇÕÇϸé 112bitÀÇ Å°ÀÌ ±æÀ̸¦ °¡Áø ¾Ïȣȭ ¹æ½ÄÀÌ µÈ´Ù. RSAEURO¿¡¼­ Áö¿øµÇ´Â DES´Â RSAREF¿ÍÀÇ È£È¯À» À§ ÇØ RSA»ç°¡ ¸¸µç DESX¸ðµåµµ Áö¿øµÈ´Ù. DESX¸ðµå´Â RSA»ç°¡ DES¸¦ °­È­ÇϱâÀ§ÇØ ¸¸µç ¸ð µå·Î¼­ DES CBC¸ð µå¾Ïȣȭ½Ã ºñ¹ÐŰ·Î XOR¸¦ ÇÔÀ¸·Î½á ¾ÏÈ£ÀÇ °­µµ¸¦ ³ôÀÎ ¸ðµåÀÌ´Ù.
µÚ¿¡ ´Ù½Ã ¾ð±ÞÇϰÚÁö¸¸ ºí·° ¾Ïȣȭ¹æ½ÄÀº ºí·°´ÜÀ§·Î ¾Ïȣȭ¸¦ Çϱ⶧¹®¿¡ ¾Ïȣȭ¸¦ ÇÏ´Â ÀÚ ·áÀÇ ±æÀ̰¡ Ç×»ó ºí·°ÀÇ ¹è¼ö¿©¾ßÇÑ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ±×·¯³ª ½ÇÁ¦´Â Ç×»ó ºí·°ÀÇ ¹è¼ö°¡ µÇÁö ¾Ê±â¶§¹®¿¡ ¾Ïȣȭ ÇÏ´Â ÀÚ·áÀÇ ¸Ç ³¡ ¿¡´Â Ç×»ó ºí·°ÀÇ ¹è¼ö¸¦ ¸¸µé±âÀ§ÇÑ Pading󸮰¡ ÀÖ¾î¾ßÇÑ´Ù.

5.1.1 API

1) DES CBC¸ðµå

void DES_CBCInit(context, key, iv, encrypt)
DES_CBC_CTX *context;        /* context */
unsigned char *key;     /* key, 8 bytes */
unsigned char *iv;       /* initializing vector, 8 bytes */
int encrypt;             /* encrypt flag (1 = encrypt, 0 = decrypt) */

int DES_CBCUpdate(context, output, input, len) DES_CBC_CTX *context; /* context */ unsigned char *output; /* output block */ unsigned char *input; /* input block */ unsigned int len;

void DES_CBCRestart(context) DES_CBC_CTX *context;

2) Triple-DES
void DES3_CBCInit(context, key, iv, encrypt)
DES3_CBC_CTX *context;       /* context */
unsigned char *key;     /* key, 24 bytes */
unsigned char *iv;       /* initializing vector, 8 bytes */
int encrypt;             /* encrypt flag (1 = encrypt, 0 = decrypt) */
int DES3_CBCUpdate(context, output, input, len)
DES3_CBC_CTX *context;       /* context */
unsigned char *output;   /* output block */
unsigned char *input;    /* input block */
unsigned int len; /* length of input and output blocks */
void DES3_CBCRestart (context)
DES3_CBC_CTX *context;       /* context */

3) DESX ¸ðµå

void DESX_CBCInit(context, key, iv, encrypt)
DESX_CBC_CTX *context;      /* context */
unsigned char *key;     /* DES key and whiteners, 24 bytes */
unsigned char *iv;       /* DES initializing vector, 8 bytes */
int encrypt;             /* encrypt flag (1 = encrypt, 0 = decrypt) */

int DESX_CBCUpdate (context, output, input, len) DESX_CBC_CTX *context; /* context */ unsigned char *output; /* output block */ unsigned char *input; /* input block */ unsigned int len; /* length of input and output blocks */

void DESX_CBCRestart(context) DESX_CBC_CTX *context; /* context */

5.1.2 ÇÁ·Î±×·¡¹Ö

1) ±¸Á¶
DESÇÁ·Î±×·¡¹ÖÀº ¸Å¿ì °£´ÜÇÏ´Ù. DES context¿¡´Ù°¡ ¾Ïȣȭ/º¹È£È­ÇÒ Å°ÀÌ¿Í iv(initial vector) ¸¦ ¼¼ÆÃÇϰí, ¾ÏȣȭÇÑ ´Ù/º¹È£È­ÇÑ´Ù¸¦ ÁöÁ¤ÇÏ´Â ÃʱâÈ­(initialization)ÇÑ ÈÄ, ¾Ïȣȭ/º¹È£È­ÇÒ ÀڷḦ 8byteÀÇ ¹è¼ö·Î ¸¸µé¾î ¾Ïȣȭ/º¹È£È­ ÇÑ´Ù(update). iv´Â ŰÀÌó·³ ·£´ýÇÏ°Ô »ý¼ºÇؼ­ ¾ÏȣȭµÈ ÀÚ·á¿Í ÇÔ²² Àü´ÞÇØ º¹È£È­ÇÒ¶§ »ç¿ë ÇÑ´Ù.

»ùÇÃÄڵ带 º¸¸é


    DES_CBC_CTX   DEScontext;
    unsigned char           buf[BUFSIZE];
    unsigned char           opa_buf[BUFSIZE];
    int              len;

    rtv = DES_CBCInit(&DEScontext, sessionkey, iv, 1);
                        /* the 1 means encryption */ 
    if(rtv != IDOK) {
            initialization error;
    }
    while(1) {
        /* 8ÀÇ ¹è¼ö·Î buf¸¦ °¡Á®¿È */
        if(getbuf_multiple8(buf) == EOF) 
            break;
        rtv = DES_CBCUpdate(&DEScontext, buf, opa_buf, len);
        if(rtv != IDOK) {
            encryption/decryption error;
        }
    }

DES´Â ¾Ïȣȭ¿Í º¹È£È­ÀÇ °á°ú°¡ µ¿ÀÏÇÑ ±æÀÌÀÇ ÀÚ·á°¡ »ý¼ºµÈ´Ù. Áï 48byteÀÇ ÀڷḦ ¾Ïȣȭ Çϸé 48byteÀÇ ¾ÏÈ£ È­µÈ ÀÚ·á°¡ »ý¼ºµÈ´Ù.

2) Padingó¸®
¾Õ¿¡¼­ ¾ð±ÞÇÑ ´ë·Î DES´Â ºí·° ¾Ïȣȭ ¹æ½ÄÀ̱⶧¹®¿¡ ¸Ç¸¶Áö¸· ÀÚ·áÀÇ ±æÀ̰¡ 8ÀÇ ¹è¼ö°¡ ¾Æ ´Ò°æ¿ì¿¡ 8ÀÇ ¹è ¼ö°¡ µÇµµ·Ï ÀڷḦ ä¿ö ¾Ïȣȭ¸¦ ÇÏ°í ¶Ç º¹È£È­¸¦ ÇÑ ÈÄ Ã¤¿öÁø ÀÚ·á´Â Á¦°ÅÇØ¾ß, Á¤»óÀûÀÎ ¾Ïȣȭ/º¹È£È­°¡ ÀÌ ·ç¾îÁø´Ù. ±×·¯¹Ç·Î ¸Ç¸¶Áö¸· ÀڷḦ 8ÀÇ ¹è¼ö°¡ µÇµµ·Ï PadingÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡Áö°¡ ÀÖÁö¸¸ RSAEURO/RSAREF ¿¡¼­ »ç¿ëÇÏ´Â Pading±â¹ýÀº ´ÙÀ½°ú °°´Ù.
¾ÏȣȭÇÏ´Â ÀÚ·áÀÇ ¸Ç¸¶Áö¸·ÀÌ 8ÀÇ ¹è¼ö°¡ µÉ °æ¿ì´Â Ãß°¡ÀûÀ¸·Î 8byte¸¦ µ¡ºÙÀÌ°í ±× 8byte´Â 8¶ó´Â ¼ýÀڷΠä ¿î´Ù. ±×¸®°í 8ÀÇ ¹è¼ö°¡ ¾ÈµÉ°æ¿ì 8ÀÇ ¹è¼ö¿¡¼­ ¸ðÀÚ¶ó´Â ¼ýÀÚ, Áï ¸Ç ¸¶Áö¸·ÀÚ·á°¡ 5byteÀÏ °æ ¿ì 3byte¸¦ ä¿ì´Â µ¥ 3À̶ó´Â ¼ýÀڷΠä¿î´Ù. ±×·¡¼­ ³ªÁß¿¡ º¹È£È­¸¦ ÇÑÈÄ ¸Ç¸¶Áö¸· byteÀÇ ¼ýÀÚ¸¦ ±Ù°Å·Î PadingµÈ byte¼ö¸¦ ¾Ë¾Æ ¼­ PadingµÈ ÀڷḦ Á¦°ÅÇÒ¼ö ÀÖ°Ô ÇÑ´Ù.
»ùÇÃÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 
    opa_len = strlen(opa_buf);
    if((pad = 8 - (opa_len % 8)) !=  0) {
       for(i = 0; i < pad; i++) opa_buf[opa_len+i] = (unsigned char) pad;
             opa_len += pad;
    }

5.2 Asymmetric Cryptography Programming - RSA

RSA´Â µÎ°³ÀÇ Å°ÀÌ Áï Public Key¿Í Private Key¸¦ °¡Áö°í »óÈ£°£¿¡ ¾Ïȣȭ/º¹È£È­¸¦ ÇÏ´Â ¹æ ½ÄÀ¸·Î¼­ ÀϹÝÀûÀÎ ÀÚ ·áÀÇ ¾Ïȣȭ¿¡¼­´Â Public Key·Î ¾ÏȣȭÇϰí Private Key·Î º¹È£È­ÇÑ´Ù. ±×·¯³ª ÀüÀÚ¼­¸í°ú °° Àº ÀÀ¿ë¿¡¼­´Â ÀÚ½ÅÀÇ Private key·Î ¾Ïȣȭ¸¦ Çϰí(ÀüÀÚ¼­¸í), Public Key·Î º¹È£È­¸¦ ÇØ, ¼­¸íÀ» È®ÀÎÇϱ⵵ ÇÑ´Ù. ÀÏ ¹ÝÀûÀ¸·Î´Â Public Key ·Î ¾Ïȣȭ¸¦ Çϰí privateŰÀÌ·Î º¹È£È­¸¦ ÇÏ´Â °ÍÀÌ ¼Óµµ°¡ ºü¸£´Ù. ±×·¯³ª ÀüüÀûÀ¸·Î´Â ´ëĪÇü ¾Ïȣȭ¹æ½Äº¸´Ù´Â ¼Óµµ°¡ ¸Å¿ì ´À¸®´Ù.
RSA¾Ïȣȭ/º¹È£È­¿¡´Â ´ÙÀ½°ú °°Àº ³×°³ÀÇ ÇÔ¼ö°¡ ÀÖ´Ù.

Á¦¸ñ ¾øÀ½
RSAPrivateEncrypt Encrypts a block of data using an RSA private key, according to PKCS#1: RSA Encryption Standard.
RSAPrivateDecrypt Decrypts a block of data using an RSA private key, according to PKCS#1: RSA Encryption Standard.
RSAPublicEncrypt Encrypts a block of data using an RSA public key, according to PKCS#1: RSA Encryption Standard.
RSAPublicDecrypt Decrypts a block of data using an RSA public key, according to PKCS#1: RSA Encryption Standard.

5.2.1 API

1) Private Key·Î ¾Ïȣȭ
int RSAPrivateEncrypt(output, outputLen, input, inputLen, privateKey)
unsigned char *output;           /* output block */
unsigned int *outputLen; /* length of output block */
unsigned char *input;            /* input block */
unsigned int inputLen;           /* length of input block */
R_RSA_PRIVATE_KEY *privateKey;     /* RSA private key */
2) Private Key·Î º¹È£È­
int RSAPrivateDecrypt(output, outputLen, input, inputLen, privateKey)
unsigned char *output;           /* output block */
unsigned int *outputLen;         /* length of output block *
unsigned char *input;            /* input block */
unsigned int inputLen;           /* length of input block */
R_RSA_PRIVATE_KEY *privateKey;     /* RSA private key */
3) Public key·Î ¾Ïȣȭ
int RSAPublicEncrypt(output, outputLen, input, inputLen, publicKey,
                     randomStruct)
unsigned char *output;           /* output block */
unsigned int *outputLen; /* length of output block */
unsigned char *input;            /* input block */
unsigned int inputLen;           /* length of input block */
R_RSA_PUBLIC_KEY *publicKey;        /* RSA public key */
R_RANDOM_STRUCT *randomStruct;   /* random structure */
4) Public Key·Î º¹È£È­
int RSAPublicDecrypt(output, outputLen, input, inputLen, publicKey)
unsigned char *output;           /* output block */
unsigned int *outputLen; /* length of output block */
unsigned char *input;            /* input block */
unsigned int inputLen;           /* length of input block */
R_RSA_PUBLIC_KEY *publicKey;        /* RSA public key */
5) RSA Key»ý¼º
int R_GeneratePEMKeys(publicKey, privateKey, protoKey, randomStruct)
R_RSA_PUBLIC_KEY *publicKey;        /* new RSA public key */
R_RSA_PRIVATE_KEY *privateKey;     /* new RSA private key */
R_RSA_PROTO_KEY *protoKey; /* RSA prototype key */
R_RANDOM_STRUCT *randomStruct;   /* random structure */

5.2.2 ÇÁ·Î±×·¡¹Ö

RSAÇÁ·Î±×·¡¹ÖÀº DES¾Ïȣȭ ¹æ½Äº¸´Ù ºñ±³Àû °£´ÜÇÏ´Ù. ÀϹÝÀûÀ¸·Î ´ë·®ÀÇ ÀڷḦ RSA·Î Á÷ Á¢ ¾Ïȣȭ¸¦ ÇÏÁö ¾Ê±â¶§¹®¿¡ RSA ¾Ïȣȭ APIµéÀº while()·çÇÁ³ª for()·çÇÁ¸¦ µ¹¸é¼­ ÀڷḦ Á¶±Ý¾¿ ºÐÇÒÇØ¼­ ¾Ï ȣȭÇÏ´Â ¹æ½ÄÀº °ÅÀÇ »ç¿ëÇÏÁö ¾Ê°í ÀûÀº ÀڷḦ Çѹø¿¡ ¾ÏȣȭÇϰųª º¹È£È­Çϱ⶧¹®¿¡ °£´ÜÇÑ ÀÎÅÍÆÐÀ̽º·Î ¸¸µé¾î Á® ÀÖ´Ù. ÀϹÝÀûÀ¸ ·Î RSA·Î ¾ÏȣȭÇÏ´Â ÀÚ·á´Â ÀϹÝÀÚ·á¶ó±âº¸´Ù´Â ÀϹÝÀڷḦ ´ëĪÇü ¾Ïȣȭ¹æ½ÄÀ¸·Î ¾ÏȣȭÇÏ °í ±× ÆÐ½º¿öµå(Ű ÀÌ)¸¦ º¸È£ÇϱâÀ§ÇØ ¾ÏȣȭÇÏ´Â ¹æ¹ýÀ¸·Î RSA¸¦ »ç¿ëÇϱ⶧¹®¿¡ ÁÖ·Î 8byte, 24byteÁ¤µµ¸¦ ¾ÏÈ£ È­Çϴµ¥ »ç¿ëÇÑ´Ù. ±×·¯¹Ç·Î ¾Ïȣȭ¹æ½ÄÀº ¸Å¿ì °£´ÜÇÏ´Ù. ¾Õ´Ü¶ôÀÇ API¸¸º¸¸é ±×³É »ç¿ëÇÒ¼ö ÀÖÀ»Á¤µµ·Î °£´ÜÇϱ⠶§¹®¿¡ ¿©±â¼­´Â ¿¹ Á¦¸¦ ´Ù·çÁö ¾Ê°Ú´Ù.
RSAŰ½ÖÀ» »ý¼ºÇÏ´Â R_GeneratePEMKeys()ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇϰڴÙ. RSA¾Ïȣȭ ´Â µÎ°³ÀÇ Å°(Public Key, Private Key)¸¦ »ç¿ëÇÑ´Ù. RSA۸¦ »ý¼ºÇϱâÀ§Çؼ­´Â ŰÀDZæÀÌ, ¸ðµå, ±×¸®°í ·£´ýÇÑ ¼ýÀÚ µîÀÌ ÇÊ¿äÇÏ´Ù.
»ùÇÃÄÚµå´Â ´ÙÀ½°ú °°´Ù.

    R_RSA_PUBLIC_KEY PUB_KEY;
    R_RSA_PRIVATE_KEY PRI_KEY;
    R_RSA_PROTO_KEY protoKey;

    protoKey.bits = 1024;                /* KeyÀÇ ±æÀÌ           */
    protoKey.useFermat4 = 1;                    /* RSA Key Mode              */
    status = R_GeneratePEMKeys(&PUB_KEY, &PRI_KEY, &protoKey, randomStruct);
    if(status) {
              PrintError("Key Generation", status);
              return;
    }

5.2.3 ·£´ý ÇÔ¼ö

´ëĪÇü¾Ïȣȭ¹æ½ÄÀ̳ª ºñ´ëĪÇü ¾Ïȣȭ¹æ½Ä¿¡¼­³ª ¾Ïȣȭ¾Ë°í¸®ÁòÀÌ ¾Æ¹«¸® °­·ÂÇÏ´ÙÇÏ´õ¶óµµ ¾ÏȣȭÇÒ¶§ »ç¿ëÇÏ ´Â ÆÐ½º¿öµå(Ű)°¡ ´Ù¸¥ »ç¶÷ÀÌ ½±°Ô ÃßÁ¤ÀÌ °¡´ÉÇÏ´Ù¸é ¾Ïȣȭ¾Ë°í¸®ÁòÀÇ ¿ì¼ö¼ºÀº Àǹ̰¡ ¾ø´Â °ÍÀÌ µÇ°í ¸¸´Ù. Áï ¾ÏȣȭÅë½ÅÀ» ÇÒ¶§ »ç¿ëÇϴ Ű(´ëĪÇü¾ÏȣȭŰ, ºñ´ëĪÇü¾ÏȣȭŰ)µéÀ» »ý¼ºÇÒ¶§ ³²µéÀÌ ½±°Ô ÃßÁ¤ÀÌ ºÒ°¡´ÉÇÏ µµ·Ï ·£´ýÇÏ°Ô »ý¼ºÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.
ÀϹÝÀûÀ¸·Î UNIXµî ÄÄÇ»ÅͽýºÆÀ¿¡¼­ »ç¿ëÇÏ´Â ·£´ýÇÔ¼ö(rand())´Â ÄÄÇ»ÅÍÀÇ Å¬·°À» °¡Áö°í »ý ¼ºÇÏ´Â ·£´ýÇÔ¼ö·Î ¼­ ¾ö¹ÐÇÏ°Ô ¸»ÇÏÀÚ¸é ·£´ýÇÏ´Ù°í ÇÒ¼ö°¡ ¾ø´Ù. ¿Ö³ÄÇÏ¸é »ý¼ºµÇ´Â ·£´ý¼ýÀÚÀÇ seed¸¦ ¾Ë¼ö°¡ Àֱ⶧¹®¿¡ ·£´ý ¼ý ÀÚ¸¦ ¿¹ÃøÀÌ °¡´ÉÇϱ⶧¹®ÀÌ´Ù.
RSA۸¦ »ý¼ºÇÒ¶§´Â ÀϹÝÀûÀ¸·Î ÄÄÇ»ÅÍÀÇ Å°º¸µå¸¦ ¸¶À½´ë·Î ÀÔ·ÂÇϵµ·Ï ÇÑ´Ù. À̶§ ÀÔ·ÂµÈ ³» ¿ëÀ» seed·Î »ç¿ë ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Űº¸µå¸¦ µÎµå¸®´Â ½Ã°£Àû °£°ÝÀ» seed·Î »ç¿ëÇØ¼­ ·£´ý ¼ýÀÚ¸¦ ±¸Çϰí À̸¦ ±â¹ÝÀ¸·Î RSA۸¦ »ý¼ºÇÑ´Ù.
RSAEURO/RSAREF¿¡¼­ÀÇ ·£´ýÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù. ÀÌ À̿ܿ¡µµ ½Ã½ºÆÀÀÇ clockÀ» ÀÌ¿ëÇØ ·£ ´ý ¼ýÀÚ¸¦ ±¸ÇÏ´Â ÇÔ ¼öµîÀÌ ÀÖ´Ù.

(1) ·£´ý ½ºÆ®·°ÃÄ ÃʱâÈ­
int R_RandomInit(random)
R_RANDOM_STRUCT *random;         /* random structure */

(2) ·£´ý ½ºÆ®·°Ãĸ¦ blockÀڷḦ seed·ÎÇØ¼­ ·£´ýÈ­
int R_RandomUpdate(random, block, len)
R_RANDOM_STRUCT *random; /* random structure */
unsigned char *block;            /* block of data */
unsigned int len;        /* length of block */
(3) ÇöÀçÀÇ ·£´ý ½ºÆ®·°Ãĸ¦ ÃæºÐÈ÷ ·£´ýÈ­ÇϱâÀ§ÇØ ÇÊ¿äÇÑ seed byte¼ö.
int R_GetRandomBytesNeeded(bytesNeeded, random)
unsigned int *bytesNeeded       /* number of mix-in bytes needed */
R_RANDOM_STRUCT *random          /* random structure */
(4) ÇöÀçÀÇ ·£´ý ³Ñ¹ö¸¦ Áö¿ò.
void R_RandomFinal(random)
R_RANDOM_STRUCT *random; /* random structure */

ÀÌ»óÀÇ ·£´ýÇÔ¼ö¸¦ ÀÌ¿ëÇØ ·£´ý ½ºÆ®·°Ãĸ¦ ¸¸µå´Â »ùÇà ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

    static unsigned char seedByte = 0;
    unsigned int bytesNeeded;
    static R_RANDOM_STRUCT randomStruct;

    R_RandomInit(&randomStruct);
    while (1) {
            R_GetRandomBytesNeeded(&bytesNeeded, &randomStruct);
            if(bytesNeeded == 0)
                    break;
            get_seed_data(&seedByte);           /* Get Seed data from any way */
            R_RandomUpdate(&randomStruct, &seedByte, 1);
    }

    /* using randomStruct in the Cryptography function */

    R_RandomFinal(&randomStruct);

¿©±â¼­ get_seed_data()´Â ¾Õ¿¡¼­ ¾ð±ÞÇÑ Å°º¸µåÀÔ·ÂÀÇ ½Ã°£°£°Ýµî ¿ÜºÎ·ÎºÎÅÍ seedÀڷḦ ¾ò¾î ³»´Â ÇÔ¼öÀÌ´Ù.

5.3 Message Digest Programming

¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÇÔ¼ö´Â ¾Õ¿¡¼­ ¾ð±ÞÇßµíÀÌ ¸Þ½ÃÁö¿¡ ´ëÇØ À¯ÀÏÇÑ Ã½¼¶À» ±¸ÇÏ´Â ÇÔ¼ö ÀÌ´Ù. Áï ¸Þ½ÃÁöÀÇ ³»¿ë ÀÇ ¼öÁ¤»èÁ¦µîÀ» Áõ¸íÇÒ¼ö ÀÖ´Â °íÁ¤±æÀÌÀÇ Äڵ带 »ý¼ºÇÏ´Â ÇÔ¼öÀÌ´Ù. ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ ÇÏ´Â ÇÔ¼ö·Î´Â MD2, MD5µîÀÌ ÀÖÀ¸¸ç RSAREF¿¡´Â ¾øÁö¸¸ RSAEURO¿¡´Â SHAÇÔ¼öµµ Áö¿øÇϰí ÀÖ´Ù. SHA¾Ë°í¸® ÁòÀº MD5º¸´Ù °­·Â ÇÑ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÇÔ¼ö¶ó°í ÇÒ¼ö ÀÖ´Ù. MD2³ª MD4, MD5´Â 128bit ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÄÚµå ¸¦ »ý¼ºÇϸç SHA ´Â 160bit ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® Äڵ带 »ý¼ºÇϸç SHA´Â SHS¶ó°í (Secure Hash Standard)·Î ¹Ì±¹ FIPSÀÇ Ç¥ÁØÀ¸·Î ÀÌ¿ë µÇ°í ÀÖ´Ù.
¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®ÇÔ¼ö´Â ¾î´ø ÀÚ·á(¸Þ½ÃÁö)¸¦ ó¸®Çؼ­ ¸Þ½ÃÁö¿¡ ´ëÀÀµÇ´Â 128bit, 160bitÀÇ ´Ù ÀÌÁ¦½ºÆ®Äڵ带 »ý¼º ÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÄÚµå´Â ¸Þ½ÃÁöÀÇ ÅëÇÕ¼ºÀ» Áõ¸íÇϰųª ÀüÀÚ¼­¸í(Digital Signature)¸¦ ÇÒ¶§ »ç¿ë ÇÑ´Ù.

5.3.1 API

(1) ÇÔ¼ö context¿Í ´ÙÀÌÁ¦½ºÆ®¾Ë°í¸®Áò(MD2, MD4, MD5, SHS) ¼±Á¤
int R_DigestInit(context, digesttype)
R_DIGEST_CTX *context;               /* new context */
int digesttype;                   /* message-digest algorithm */
(2) ¸ÞÁöÁö¸¦ ó¸®Çؼ­ ´ÙÀÌÁ¦½ºÆ®¸¦ °è»ê
int R_DigestUpdate(context, partIn, partInLen)
R_DIGEST_CTX *context;               /* context */
unsigned char *partIn;           /* next data part */
unsigned int partInLen;          /* length of next data part */
(3) ÃÖÁ¾ÀûÀ¸·Î ´ÙÀÌÁ¦½ºÆ® ÄÚµå »ý¼º
int R_DigestFinal(context, digest, digestLen)
R_DIGEST_CTX *context;               /* context */
unsigned char *digest;           /* message digest */
unsigned int *digestLen; /* length of message digest */
(4) ¸Þ½ÃÁö ºí·°À» Çѹø¿¡ ´ÙÀÌÁ¦½ºÆ® ÄÚµå »ý¼º
int R_DigestBlock(digest, digestLen, block, blockLen, digestAlgorithm)
unsigned char *digest;           /* message digest */
unsigned int *digestLen; /* length of message digest */
unsigned char *block;            /* block */
unsigned int blockLen;           /* length of block */
int digestAlgorithm;             /* message-digest algorithm */

¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÇÔ¼ö´Â À§¿¡ ¾ð±ÞÇÑ 12°¡Áö À̿ܿ¡µµ °¢°¢ÀÇ ´ÙÀÌÁ¦½ºÆ®¾Ë°í¸®Áòº°·Î °¢°¢ 3-4°³¾¿ÀÇ ÇÔ¼ö°¡ º°µµ·Î Á¸ÀçÇÑ´Ù. Çʿ信 µû¶ó ÀÌ·± ÇϺÎÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÒ¼öµµ ÀÖ´Ù.

5.3.2 ÇÁ·Î±×·¡¹Ö

¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÇÁ·Î±×·¡¹ÖÀº ¸ÕÀú XXXInit()À¸·Î context¸¦ ÃʱâÈ­ÇÏ°í³ª¼­ ¸Þ½ÃÁö´ÙÀÌÁ¦½º Æ®¸¦ ±¸ÇÒ ¸Þ½ÃÁö¸¦ ÀÔ·ÂÇØ¼­ ´ÙÀÌÁ¦½ºÆ®¸¦ °è»êÇÏ´Â °úÁ¤À¸·Î¼­ XXXUpdate()ÇÔ¼ö°¡ ÀÖ°í, ¸¶Áö¸·À¸·Î XXXFinal() ÇÔ¼ö·Î¼­ ¸Þ½ÃÁö ´ÙÀÌ Á¦½ºÆ®¸¦ ±¸ÇÑ´Ù. ¾Õ¿¡ ºÙ¿©Áø XXX´Â MD2, MD4, MD5, SHSµîÀ¸·Î ±¸ºÐµÈ´Ù. ÀÌ·±½ÄÀ¸·Î ÃÑ 12°³ÀÇ ÇÔ¼ö°¡ °¢°¢ÀÇ ¾Ë°í¸®Áòº°·Î ±¸¼ºµÇ¾î ÀÖÀ¸³ª ÇÁ·Î±×·¡¹ÖÀÇ ÆíÀǸ¦ À§ÇØ °¢°¢ÀÇ ¾Ë°í¸®ÁòÀ» ÃѰýÇÏ´Â »óÀ§ÇÔ¼ö °¡ Á¸ÀçÇÑ´Ù. ÀÌ°Í ÀÌ 5.3.1Àý¿¡ º¸¿©ÁØ 4°³ÀÇ ÇÔ¼ö ÀÌ´Ù. ÇÁ·Î±×·¡¸Ó´Â ÃʱâÈ­¶§ ´ÙÀÌÁ¦½ºÆ® ¾Ë°í¸®ÁòÀ» ÁöÁ¤ÇصΠ°í ³ª¸ÓÁö´Â µ¿ÀÏ ÇÑ API¸¦ »ç¿ëÇÒ¼ö ÀÖµµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù.
»ùÇÃÄÚµå´Â ´ÙÀ½°ú °°´Ù.

    R_DIGEST_CTX    MDcontext;

    R_DigestInit(&MDcontext, DA_MD5);
    while(1) {
        if(get_data(data)  ==  EOF)      break;
        R_DigestUpdate(&MDcontext, data, sizeof(data));
    }
    R_DigestFinal(&MDcontext, digest_code, &digest_len);

R_DigestInit()ÇÔ¼ö¿¡¼­ DA_MD5¸¦ ¼±ÅÃÇϸé MD5¾Ë°í¸®ÁòÀ¸·Î ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸Çϰڴ٠´Â ÃʱâÈ­ÀÌ´Ù. ¿©±â ¿¡ DA_MD2, DA_MD4, DA_SHSµîÀ» »ç¿ëÇÔÀ¸·Î½á ´ÙÀÌÁ¦½ºÆ® ¾Ë°í¸®ÁòÀ» ¹Ù²Ü¼ö ÀÖ´Ù.

5.4 Digital Signature Programming

RSA¸¦ ÀÌ¿ëÇÑ ÀüÀÚ¼­¸íÀº RSAÀÇ Private Key·Î ¾ÏÈ£È­ÇØ¼­ ¸Þ½ÃÁö¸¦ Á¦°øÇÏ´Â ¹æ¹ýÀÌ °¡Àå ÀϹÝÀûÀÎ ÀüÀÚ¼­¸í¹æ ½ÄÀÌ´Ù. ±×·¯³ª ¸Þ½ÃÁö Àüü¸¦ RSA Private key·Î ¾ÏȣȭÇÏ´Â °ÍÀº ¸Å¿ì ºñÈ¿À²ÀûÀÎ ÀÏÀ̵ȴÙ. ±×·¡¼­ ¸Þ½ÃÁöÀÇ ´Ù ÀÌÁ¦½ºÆ®Äڵ带 ±¸ÇÑÈÄ¿¡ ´ÙÀÌÁ¦½ºÆ®Äڵ带 RSA Private Key·Î ¾ÏȣȭÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. ³ªÁß¿¡ »çÀÎÀ» È®ÀÎÇÏ ´Â ¹æ¹ýÀº ¿ªÀ¸·Î ¸Þ½ÃÁöÀÇ ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸Çϰí, ¸Þ½ÃÁö¿¡ µû¶ó¿Â ¼­¸íÀ» ¼Û½ÅÀÚÀÇ Public Key ·Î º¹È£È­¸¦ ÇØ¼­ ¼Û ½ÅµÈ ´ÙÀÌÁ¦½ºÆ®¸¦ ¾ò¾î¼­, ÀÌ µÎ ´ÙÀÌÁ¦½º¸¦ ¼­·Î ºñ±³ÇØ ÀÏÄ¡ÇÏ¸é ¼­¸íÀ» È®ÀÎÇÑ °ÍÀÌ µÈ ´Ù.

5.4.1 API

(1) ¼­¸í ÃʱâÈ­, ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ® ¾Ë°í¸®Áò ¼±ÅÃ
int R_SignInit(context, digesttype)
R_SIGNATURE_CTX *context;          /* new context */
int digesttype;                           /* message-digest algorithm */
(2) ¸Þ½ÃÁöÀÇ ¼­¸íÀ» ó¸®
int R_SignUpdate(context, partIn, partInLen)
R_SIGNATURE_CTX *context;          /* context */
unsigned char *partIn;                   /* next data part */
unsigned int partInLen;                  /* length of next data part */
(3) ¼­¸íÃÖÁ¾ÀûÀ¸·Î ¼­¸íÄÚµå »ý¼º
int R_SignFinal(context, signature, signatureLen, privateKey)
R_SIGNATURE_CTX *context;          /* context */
unsigned char *signature;                /* signature */
unsigned int *signatureLen;              /* length of signature */
R_RSA_PRIVATE_KEY *privateKey;             /* signer's RSA private key */
(4) Çѹø¿¡ ¸Þ½ÃÁö ºí·°À» ¼­¸íÇÏ°í ¼­¸íÄÚµå »ý¼º
int R_SignBlock(signature, signatureLen, block, blockLen,digestAlgorithm, privateKey)
unsigned char *signature;                /* signature */
unsigned int *signatureLen;              /* length of signature */
unsigned char *block;                    /* block */
unsigned int blockLen;                   /* length of block */
int digestAlgorithm;                     /* message-digest algorithm */
R_RSA_PRIVATE_KEY *privateKey;             /* signer's RSA private key */
(5) ¼­¸íÈ®ÀÎÀÛ¾÷ ÃʱâÈ­, ´ÙÀÌÁ¦½ºÆ® ¾Ë°í¸®Áò ¼¼ÆÃ
int R_VerifyInit(context, digesttype)
R_SIGNATURE_CTX *context;          /* new context */
int digesttype;                           /* message-digest algorithm */
(6) ¸Þ½ÃÁö¿¡ ´ëÇÑ ¼­¸íÈ®ÀΠó¸®
int R_VerifyUpdate(context, partIn, partInLen)
R_SIGNATURE_CTX *context;          /* context */
unsigned char *partIn;                   /* next data part */
unsigned int partInLen;          /* length of next data part */
(7) ÃÖÁ¾ÀûÀ¸·Î ¸Þ½ÃÁö¿¡¼­ »ý¼ºµÈ ´ÙÀÌÁ¦½ºÆ®¿Í ¼­¸íÀ» º¹È£È­Çؼ­ »ý¼ºµÈ ´ÙÀÌÁ¦½ºÆ®ºñ±³
int R_VerifyFinal(context, signature, signatureLen, publicKey)
R_SIGNATURE_CTX *context;          /* context */
unsigned char *signature;                /* signature */
unsigned int *signatureLen;              /* length of signature */
R_RSA_PRIVATE_KEY *privateKey;             /* signer's RSA public key */
(8) ¸Þ½ÃÁö ºí·°À» Çѹø¿¡ ¼­¸íÈ®ÀÎ
int R_VerifyBlockSignature( block, blockLen, signature, signatureLen, 
                            digestAlgorithm, publicKey)
unsigned char *block;                    /* block */
unsigned int blockLen;                   /* length of block */
unsigned char *signature;                /* signature */
unsigned int signatureLen;               /* length of signature */
int digestAlgorithm;                     /* message-digest algorithm */
R_RSA_PUBLIC_KEY *publicKey;                /* signer's RSA public key */

5.4.2 ÇÁ·Î±×·¡¹Ö

ÀüÀÚ¼­¸í°ü·Ã ÇÁ·Î±×·¡¹ÖÀº ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ® ÇÁ·Î±×·¡¹Ö°ú ±¸Á¶°¡ ¶È°°´Ù. »ç½Ç ÀüÀÚ¼­¸íÀÇ ´ë ºÎºÐÀÇ °úÁ¤Àº ¸Þ ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÏ´Â µ¥ Àֱ⶧¹®¿¡ °°À»¼ö ¹Û¿¡ ¾ø´Ù. ´Ù¸¸ ¸¶Áö¸· R_SignFinal()ÇÔ¼ö¿Í R_VerifyFinal()ÇÔ¼ö¿¡ ´ÙÀÌÁ¦½ºÆ®Äڵ带 RSA·Î ¾Ïȣȭ/º¹È£È­¸¦ ÇϱâÀ§ÇØ °¢°¢ RSA Private key¿Í RSA Public key¸¦ Á¦°øÇÏ´Â °ÍÀÌ ´Ù¸£´Ù.

(1) ÀüÀÚ¼­¸í
    R_SIGNATURE_CTX  context;              /* context */

    R_SignInit(&context, DA_MD5);
    while(!ReadData(file, partIn, &partInLen, sizeof (partIn))) {
    if ((status = R_SignUpdate(&context, partIn, partInLen)) != 0)
        break;
    }
    status = R_SignFinal(&context, signature,signatureLen, privateKey);
    if(status == 0) {
        /* Success  !! */
    }
    else {
        /* Fail !! */
    }
(2) ÀüÀÚ¼­¸í È®ÀÎ
    R_SIGNATURE_CTX  context;              /* context */

    R_VerifyInit(&context, DA_MD5);
    while(!ReadData(file, partIn, &partInLen, sizeof (partIn))) {
        if ((status = R_VerifyUpdate(&context, partIn, partInLen)) != 0)
                 break;
    }
    status = R_VerifyFinal(&context, signature,signatureLen, publicKey);
    if(status == 0) {
                /* Right Signature  !! */
    }
    else {
                /* Signature Fail !! */
    }

5.5 High Level API

Áö±Ý±îÁö ´ëĪÇü¾Ïȣȭ¹æ½Ä°¡¿îµ¥ ´ëÇ¥ÀûÀÎ ¹æ¹ýÀÎ DES¾ÏȣȭÇÁ·Î±×·¡¹Ö, ºñ´ëĪÇü ¾Ïȣȭ¹æ½Ä ÀÎ RSA¾ÏȣȭÇÁ·Î ±×·¡¹Ö, ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ÇÁ·Î±×·¡¹Ö, ÀüÀÚ¼­¸í ÇÁ·Î±×·¡¹ÖµîÀ» À̾߱âÇÏ¿´´Ù. ÀÌ ³×°¡Áö°¡ ¹Ù ·Î ¾ÏȣȭÇÁ·Î±×·¡ ¹ÖÀÇ ÇÙ½É ¿ä¼ÒÀÌ´Ù. ÇöÀç Àü¼¼°èÀûÀ¸·Î ¾Ë·ÁÁ®ÀÖ´Â ´ëºÎºÐÀÇ ¾ÏȣȭÀÀ¿ë½Ã½ºÆÀÀº ±×°ÍÀÌ ¹«¾ù ÀÌ´ø°£¿¡ ´ëºÎºÐ À§ ¿¡¼­ ¾ð±ÞÇÑ ³×°¡Áö ±âº»¿ä¼Ò·Î ±¸¼ºµÇ¾î ÀÖ´Ù. º¹ÀâÇϱâ·Î À¯¸íÇÑ PEM°°Àº º¸¾ÈÀüÀÚ¿ìÆí½Ã½º ÆÀµµ À§¿¡¼­ ¾ð±ÞÇÑ ³×°¡Áö ±âº»¿ä¼Ò¸¦ º¹ÇÕÀûÀ¸·Î ÀÌ¿ëÇÑ ½Ã½ºÆÀ¿¡ ºÒ°úÇÏ´Ù.
ÀÌ·± ³×°¡Áö ±âº» ¿ä¼Ò¸¦ º¹ÇÕÀûÀ¸·Î ¹­¾î¼­ ÀÚÁÖ »ç¿ëÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé¾î¼­ RSAEURO/RSAAREF´Â Á¦°øÇϰí ÀÖ ´Ù. ÀÌ ÇÔ¼ö¸¦ Envelop ÇÔ¼ö¶ó°í ºÎ¸¥´Ù. Digital EnvelopÀ̶õ ¾î¶² ÀڷḦ ¾ÏÈ£È­ÇØ¼­ Àü´ÞÇÒ ¶§ ÀϹÝÀûÀ¸·Î ´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀ¸·Î ŰÀ̸¦ »ý¼ºÇؼ­ ¾ÏȣȭÇÑ ÈÄ, ŰÀ̸¦ ºñ´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀ¸·Î ¾Ïȣȭ ÇØ¼­ ºÀÇÕÇØ¼­ ¼ö ½ÅÀÚ¿¡°Ô Àü´ÞÇÏ´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù. ÀڷḦ Àüü¸¦ ºñ´ëĪÇü ¾Ïȣȭ¾Ë°í¸®ÁòÀ¸·Î ¾ÏȣȭÇÑ´Ù´Â °ÍÀº ¸Å¿ì ºñÈ¿À²Àû À̱⶧¹®¿¡ È¿À²¼ºÀ» À§ÇØ ÀÌ·± ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·± ¿©·¯´Ü°èÀÇ ÀÏÀ» °£´ÜÈ÷ ó¸®ÇÏ ´Â ÇÔ¼ö¸¦ ¼Ò°³ÇÑ´Ù.

5.5.1 API

(1) Digital Envelop ÃʱâÈ­
int R_SealInit(context, encryptedKeys, encryptedKeyLens, iv, publicKeyCount,
               publicKeys, encryptionAlgorithm, randomStruct
R_ENVELOPE_CTX *context;            /* new context */
unsigned char **encryptedKeys;          /* encrypted keys */
unsigned int *encryptedKeyLens;         /* lengths of encrypted keys */
unsigned char iv[8];                     /* initialization vector */
unsigned int publicKeyCount;            /* number of public keys */
R_RSA_PUBLIC_KEY **publicKeys;              /* public keys */
int encryptionAlgorithm;         /* data encryption algorithm */
R_RANDOM_STRUCT *randomStruct;           /* random structure */

Digital Envelop ÃʱâÈ­´Â context¸¦ ÃʱâÈ­ÇÏ´Â ÀÛ¾÷ÀÌ´Ù. ¿©±â¿¡ ÇÊ¿äÇÑ Á¤º¸´Â ¼ö½ÅÀÚÀÇ RSA Public Key (¿©±â¼­´Â º¹¼ö·Î ³Ñ°ÜÁÖ°í ±× °¡¿îµ¥ ¾ÏȣȭÇÒ Public KeyÀÇ ¹øÈ£¸¦ ÁöÁ¤ÇÏ´Â Çü½ÄÀ» ÃëÇÑ´Ù)¿Í ÀڷḦ ¾Ï ȣȭÇÒ ´ëĪÇü ¾ÏÈ£ È­ ¾Ë°í¸®ÁòÀ» ÁöÁ¤ÇÏ°í ·£´ý±¸Á¶Ã¼¸¦ ³Ñ°ÜÁØ´Ù. ±×¸®°í ÃʱâÈ­ °á°ú·Î´Â ÀڷḦ ¾ÏȣȭÇÒ (RSA ·Î ¾ÏȣȭµÈ) ´ëĪ Çü¾Ïȣȭ ¾Ë°í¸®ÁòÀÇ ¼¼¼ÇŰ¿Í iv°ªÀ» ³Ñ°Ü¹Þ´Â´Ù.

(2) ÀÚ·á Digital Envelop ó¸®
int R_SealUpdate (context, partOut, partOutLen, partIn, partInLen)
R_ENVELOPE_CTX *context;            /* context */
unsigned char *partOut;                 /* next encrypted data part */
unsigned int *partOutLen;                /* length of next encrypted data part */
unsigned char *partIn;                   /* next data part */
unsigned int partInLen;                  /* length of next data part */

Digital Envelop 󸮰úÁ¤Àº envelopÇÒ ÀڷḦ Á¦°øÇÏ°í ¾ÏȣȭµÈ ÀڷḦ ³Ñ°Ü¹Þ´Â ÀÛ¾÷ÀÌ´Ù.

(3) Digital Envelop Á¾·á
int R_SealFinal(context, partOut, partOutLen)
R_ENVELOPE_CTX *context;            /* context */
unsigned char *partOut;                 /* last encrypted data part */
unsigned int *partOutLen;                /* length of last encrypted data part */

Digital Envelop Á¾·áÀÛ¾÷Àº ÀÚ·á´Â ³Ñ°ÜÁÖÁö¾Ê°í ÃÖÁ¾ÀûÀΠó¸®(ÁÖ·Î Padingó¸®)¸¦ ÇÑ ¾ÏȣȭµÈ ¸¶Áö¸· ÀڷḦ ³Ñ°Ü ¹Þ´Â °ÍÀ¸·Î Á¾·á°¡ µÈ´Ù.

´ÙÀ½ ¼¼°³ÀÇ ÇÔ¼ö´Â Digital EnvelopµÈ ÀڷḦ º¹È£È­ÇÏ´Â µ¥ »ç¿ëÇÏ´Â ÇÔ¼öµéÀÌ´Ù.

(4) Opening ÃʱâÈ­
int R_OpenInit(context, encryptionAlgorithm, encryptedKey, 
                                        encryptedKeyLen, iv, privateKey)
R_ENVELOPE_CTX *context;            /* new context */
int encryptionAlgorithm;         /* data encryption algorithm */
unsigned char *encryptedKey;            /* encrypted data encryption key */
unsigned int encryptedKeyLen;           /* length of encrypted key */
unsigned char iv[8];                     /* initialization vector */
R_RSA_PRIVATE_KEY *privateKey;             /* recipient's RSA private key */

(5) ÀÚ·á Digital Envelop Opening ó¸®
int R_OpenUpdate(context, partOut, partOutLen, partIn, partInLen)
R_ENVELOPE_CTX *context;            /* context */
unsigned char *partOut;                 /* next recovered data part */
unsigned int *partOutLen;                /* length of next recovered data part */
unsigned char *partIn;                   /* next encrypted data part */
unsigned int partInLen;                  /* length of next encrypted data part */

(6) Digital Envelop Opening Á¾·á
int R_OpenFinal(context, partOut, partOutLen)
R_ENVELOPE_CTX *context;            /* context */
unsigned char *partOut;                 /* last recovered data part */
unsigned int *partOutLen;                /* length of last recovered data part */

5.5.2 ÇÁ·Î±×·¡¹Ö

Digital EnvelopÀº ¼¼¼ÇŰ(´ëĪÇü¾Ïȣȭ ŰÀÌ)»ý¼º°ú RSA/´ëĪÇü¾Ïȣȭ¸¦ µ¿½Ã¿¡ ó¸®ÇÒ¼ö ÀÖÀ¸ ¹Ç·Î ¸Å¿ì °£ÆíÇÑ ÇÔ ¼öÀÌ´Ù. »ùÇà ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

     R_ENVELOPE_CTX context;

     R_SealInit(&context, encryptedKeys, &encryptedKeyLen, 
                iv, 1, &publicKey, encryptionAlgorithm, randomStruct);
     while(!ReadInData (inFile, partIn, &partInLen, sizeof (partIn))) {
        status = R_SealUpdate(&context, partOut, &partOutLen, partIn, partInLen);
        if (status != ID_OK)
               break;
        WriteOutData (outFile, partOut, partOutLen);
     }
     R_SealFinal (&context, partOut, &partOutLen);

5.6 ¾Ïȣȭ ÇÁ·ÎÅäÄÝ

±×·¯³ª ¾Ïȣȭ°¡ µÇ¾î ÀÖ´Ù°í ¸ðµç º¸¾ÈÀÌ ÀÚµ¿ÀûÀ¸·Î ÀÌ·ç¾îÁö´Â °ÍÀº ¾Æ´Ï´Ù. ¾ÏȣȭµÈ ÀÚ·á ÀÚü´Â ¾ÈÀüÇÏ´Ù ÇÏ´õ¶óµµ ¾ÏȣȭÇϱâÀ§ÇØ »ý¼ºÇÑ ¼¼¼ÇŰ, ·£´ýÇÔ¼ö, Åë½Å»ó¿¡¼­ ¹ß»ýÇÒ¼ö ÀÖ´Â ¿©·¯°¡Áö ȯ°æµî¿¡ ÀÇÇØ ¸¹Àº ÇêÁ¡µé ÀÌ ¹ß»ýµÉ¼ö ÀÖ´Ù. ÀÌ·± ÇêÁ¡µéÀ» º¸¿ÏÇϱâÀ§Çؼ­ ¾ÏȣȭÇÁ·ÎÅäÄÝÀÌ ÀÖ´Ù. ÀڷḦ ´Ü¼øÈ÷ ¾ÏÈ£ È­ÇØ¼­ Àü´ÞÇϴµ¥ À־ Àü´ÞÇÏ´Â ¹æ½Ä, »óÈ£°£¿¡ ŰÀÌ Àü´Þµî ÁÖº¯È¯°æÀ» ÅëÇÕÀûÀ¸·Î Àû¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ïȣȭ ÇÁ ·ÎÅäÄÝÀ̶ó ÇÑ´Ù. ÀÌ·± ÇÁ·ÎÅäÄÝ¿¡´Â SSL, S-HTTP, PEM, PGPµî °¢Á¾ ÀÀ¿ë½Ã½ºÆÀº°·Î ÀûÇÕÇÑ ÇÁ·ÎÅäÄÝÀÌ ÀÖÀ¸¸ç À̵éÀ» °¢°¢ÀÇ ÀÀ¿ë½Ã ½ºÆÀ¿¡ Ȱ¿ëÇÏ°Ô µÈ´Ù.
¾Æ¹«¸® °£´ÜÇÑ ¾ÏȣȭÀÀ¿ë½Ã½ºÆÀÀÌ¶óµµ ÆÐ½º¿öµå¸¦ ¾î¶»°Ô ÀúÀåÇÒ °ÍÀΰ¡? RSA private Key¸¦ »ç¿ëÀÚ°¡ 1024bit¸¦ ¿Ü¿ì°í ÀÖÀ»¼ö´Â ¾øÀ¸´Ï±î µð½ºÅ©¿¡ ÀúÀåÇØ¾ßÇϴµ¥ ¾î¶² ÇüÅ·ΠÀúÀåÇØ¾ß ¾ÈÀüÇÏ°Ô ÀúÀåÇÒ¼ö ÀÖ ´Â°¡? µî °í·ÁÇØ¾ß ÇÒ ¿ä¼ÒµéÀÌ ¸¹ÀÌ ÀÖ´Ù. ÀÌ·± ¿ä¼ÒµéÀ» ¹Ì¸® Á¤¸®ÇÑ ¹®¼­µµ ÀÖ±äÇÑ´Ù. ºÐ·®ÀÌ Á» ¸¹±äÇÏ´õ¶óµµ PKCS(Public Key Cryptography Standard)¶ó´Â ÇüÅ·Π1¹øºÎÅÍ 11¹ø±îÁö Ç¥ÁØÀÌ Á¤ÇØÁ® ÀÖ´Ù. ÀÌ ¹®¼­´Â RSA»ç°¡ ¸¸µé¾î¼­ ¾Ïȣȭ ÀÀ ¿ë½Ã½ºÆÀÀ» °³¹ßÇÒ¶§ °øÅëÀûÀ¸·Î ÇÊ¿äÇÑ ¿©·¯°¡Áö °í·ÁÁ¡À» ¹Ì¸® Ç¥ÁØÈ­ÇØ µÐ °ÍµéÀÌ´Ù. ¸¹Àº ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀ µéÀÌ ÀÌ PKCSÇ¥ÁØÀ» µû¸£°í ÀÖ´Ù. (http://www.rsa.com/PUBS/home_frame.html) ±×·¯³ª PKCS ´Â »ó´çÈ÷ º¹ÀâÇÏ°Ô ¸¸µé ¾îÁ® À־ ¿ÀÈ÷·Á ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀÀ» ¸¸µå´Âµ¥ ¾î·´°ÔÇϰí ÀÖ´Ù´Â ºñÆÇµµ ¹Þ°í ÀÖ´Ù.
³×Æ®¿÷»óÀÇ Á¤º¸¸¦ ÃëµæÇÏ´Â attackµé°¡¿îµ¥ man in middle attack°ú °°Àº attackÀº µÎ ÄÄÇ»ÅͰ¡ Åë½ÅÀ» ÇÏ´Â °¡¿îµ¥ Á¦ 3ÀÚ°¡ ³¢¾î¼­ óÀ½ºÎÅÍ ¸ðµç ÀڷḦ ´Ù ÃëµæÇÏ°í ¼öÁ¤Çؼ­ º¸³¾¼ö ÀÖ´Ù°í ÇÑ´Ù¸é ¾Ïȣȭ¸¸À¸ ·Î´Â Á¤º¸¸¦ º¸È£ Çϴµ¥ ¹ÌÈíÇÏ´Ù.
¿¹¸¦µé¸é A¿Í B°¡ RSA¸¦ ÀÌ¿ëÇØ Åë½ÅÀ» ÇÏ·Á°í ÇÑ´Ù°í Ä¡¸é ÀϹÝÀûÀÎ ¼ø¼­´Â ´ÙÀ½°ú °° ´Ù.

  1. A´Â B¿¡°Ô ÀÚ½ÅÀÇ Public Key¸¦ ¾Ë·ÁÁÖ°í,
  2. B´Â ¼¼¼Ç۸¦ »ý¼ºÇØ AÀÇ Public Key·Î ¾ÏÈ£È­ÇØ¼­ A¿¡°Ô Àü¼ÛÇϸé,
  3. A´Â ÇØ´ç ¼¼¼Ç۸¦ ÀÚ½ÅÀÇ Private Key·Î ÇØµ¶Çؼ­ ¾ò¾î¼­ ÇØ´ç ¼¼¼ÇŰ·Î ÀڷḦ ¾Ïȣȭ ÇØ¼­ B¿¡°Ô Àü´ÞÇÑ ´Ù.
  4. B´Â ¼¼¼Ç۸¦ ¾Ë°í ÀÖÀ¸¹Ç·Î ÀڷḦ º¹È£È­Çؼ­ ¾òÀ»¼ö ÀÖ´Ù.

À̶§ A¿Í B»çÀÌ¿¡ C¶ó´Â »ç¶÷(man in middle)ÀÌ ÀÖ´Ù¸é ÀÌ·± ÀÏÀÌ °¡´ÉÇÏ´Ù.

  1. A°¡ B¿¡°Ô ÀÚ½ÅÀÇ Public Key¸¦ Àü¼ÛÇÑ´Ù
  2. C°¡ Áß°£¿¡ AÀÇ Public Key¸¦ °¡·Îä°í, ÀÚ½ÅÀÇ Public Key¸¦ B¿¡°Ô ÀüÇÑ´Ù.
  3. B´Â ¼¼¼Ç۸¦ »ý¼ºÇØ CÀÇ Public Key·Î ¾ÏÈ£È­ÇØ¼­ A¿¡°Ô Àü¼ÛÇÑ´Ù.
  4. C°¡ B·ÎºÎÅÍ A·Î °¡´Â ¾ÏȣȭµÈ ¼¼¼Ç۸¦ Áß°£¿¡¼­ °¡·Îä°í, ÀÚ½ÅÀÇ PrivateŰ·Î ÇØ´ç ¼¼¼Ç۸¦ ¾ò¾î³»°í, ´Ù½Ã AÀÇ Public Key·Î ¼¼¼Ç۸¦ ¾ÏÈ£È­ÇØ¼­ A¿¡°Ô º¸³½´Ù.
  5. A´Â ÇØ´ç ¼¼¼Ç۸¦ ÀÚ½ÅÀÇ Private Key·Î ÇØµ¶Çؼ­ ¾ò¾î¼­ ÇØ´ç ¼¼¼ÇŰ·Î ÀڷḦ ¾Ïȣȭ ÇØ¼­ B¿¡°Ô Àü´ÞÇÑ ´Ù.
  6. C°¡ ÀڷḦ Áß°£¿¡ ¾ÏȣȭµÈ ÀڷḦ °¡·Îä¼­ ÀÚ½ÅÀÌ ÀÌ¹Ì °¡Áø ¼¼¼ÇŰ·Î ÀڷḦ ÇØµ¶ÇØ º»´ÙÀ½ B¿¡°Ô Àü´Þ ÇÒÁö ¸»Áö ¸¶À½´ë·ÎÇÑ´Ù.
  7. B´Â ÀÚ·á°¡ Àü¼ÛµÇ¸é ÀÚ½ÅÀÇ ¼¼¼ÇŰ·Î º¹È£È­Çؼ­ ÀڷḦ ¾ò´Â´Ù.
ÀÌ °æ¿ì A¿Í B´Â ÀüÇô Áß°£¿¡ C°¡ ÀÖ´Ù´Â »ç½ÇÀ» ´«Ä¡Ã¤Áö ¸øÇÑ´Ù. ÀÌ·± ÀϵéÀ» ¹æÁöÇϱâÀ§ÇØ ¾Ïȣȭ¿Í ´õºÒ¾î ¿©·¯°¡Áö ÇÁ·ÎÅäÄÝÀÌ µµÀԵȴÙ. ¿©±â¼­´Â ÀÌ·± ÇÁ·ÎÅäÄݵ鿡´ëÇØ¼­´Â »ó¼¼È÷ ¾ð±ÞÇÏÁö ¾Ê°Ú ´Ù.

5.7 ±âŸ °í·ÁÇÒ Á¡

ÀÌÁ¦ ±âº»ÀûÀÎ ¾Ïȣȭ ÇÔ¼öµéÀº ´Ù ³ª¿­ÇÏ¿´´Ù. ¾Õ¿¡¼­ À̾߱â ÇßµíÀÌ ¸ðµç ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀ µéÀº À̵éÀ» º¯Çü ÀÀ¿ëÇØ¼­ ¸¸µé¾îÁö´Â °ÍµéÀÌ¸ç »õ·Î¿î ¾Ë°í¸®ÁòµéÀÌ µµÀԵȴÙÇÏ´õ¶óµµ ±âº»ÀûÀÎ °³³äÀ» À§¿¡¼­ ¾ð±ÞÇÑ °Íµé¿¡¼­ ±× ¸® ¸¹ÀÌ ¹þ¾î³ªÁö ¾Ê´Â´Ù.
±×·¯³ª ½ÇÁ¦·Î ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀµéÀ» ¸¸µé¶§ ¿©·¯°¡Áö Á¡µéÀÌ °É¸°´Ù. ´ëÇ¥ÀûÀÎ °ÍµéÀº ´ÙÀ½°ú °°´Ù.

5.7.1 RSAŰÀÇ ÀúÀå

RSAÀÇ µÎ°¡Áö ŰÀ̸¦ ¿Ü¿ì°í ÀÖÀ»¼ö´Â Àý´ë·Î ¾ø´Ù. ƯÈ÷ Public Key´Â ÀúÀåµµÇϰí Àü¼ÛµµÇØ¾ß ÇÒ Çʿ䰡 ÀÖ´Ù. Àü¼ÛÀ» ÇÑ´Ù´Â °ÍÀº ½Ã½ºÆÀÀÇ Ç÷§Æû°£¿¡ ¼­·Î ´Ù¸¥ ¿ä¼Ò(int±æÀ̵î)¸¦ °í·ÁÇØ¼­ Àü¼ÛÇϰųª ÀúÀå ÇØ¾ßÇÑ´Ù. ÀÌ·± ¾î ·Á¿òÀ» ÇØ°áÇϱâÀ§ÇØ Ç÷§Æû Á¾¼ÓÀûÀÌÁö ¾ÊÀº ¹æ¹ýÀ¸·Î ASN.1(Abstract Syntax Notation One)¾ç ½ÄÀ» µû¸£´Â DER(Distingush Encoding Rule)À̳ª BER(Basic Encoding Rule)À» »ç¿ëÇØ¼­ ÀúÀåÇÏ´Â °ÍÀ» ¸¹ÀÌ ¾²°í ÀÖ´Ù. À̰ÍÀº PKCSÇ¥ÁØ¿¡¼­ ÀÌ·¸°Ô Á¤ÀÇÇßÀ¸¸ç X.509µð·ºÅ丮 Ç¥ÁØ, SETµî¿¡¼­µµ À̹æ¹ýÀ» ¾²µµ·Ï Çϰí ÀÖ ´Ù. ASN.1¸ðµâÀº º¹ ÀâÇÏ°í ±¸ÇöÇϱⰡ ±î´Ù·Ó´Ù´Â ºñÆÇÀÌ ÀÖ±äÇÏÁö¸¸ ÇöÀç·Î´Â ¸¹ÀÌ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ±×·¯³ª ²À ASN.1Ç¥±â¸¦ µû ¸¥ DER, BER¸ðµâ·Î ÀúÀåÇÒ ÇÊ¿ä´Â ¾ø´Ù. ³ª¸§´ë·Î Ç÷§Æû ºñÁ¾¼ÓÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇØ Read/Write°¡ °¡´ÉÇÑ ¹æ¹ýÀ» Á¤ÀÇÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù.
ŰÀ̸¦ ÀúÀåÇÒ¶§ °í·ÁÇØ¾ßÇÒ ¶Ç ÇѰ¡ÁöÀÇ ¹®Á¦Á¡Àº ¹Ù·Î º¸¾ÈÀÌ´Ù. Çϵåµð½ºÅ©¿¡ ÀÚ½ÅÀÇ RSA Private Key¸¦ ±×´ë·Î ÀúÀåÇØ µÎ¸é ´©±º°¡°¡ ±× ÆÄÀÏÀ» ÈÉÃİ¡¸é ÀÚ½ÅÀÇ ¸ðµç º¸¾ÈÀº ±ú¾îÁø´Ù°í º¼¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ŰÀ̸¦ µð½ºÅ©¿¡ ÀúÀåÇÒ¶§´Â ¾Ïȣȭ¸¦ ÇØ¼­ ÀúÀåÇϴµ¥ ÀϹÝÀûÀ¸·Î´Â ÆÐ½º¿öµå¸¦ Oneway Hash¸¦ Åë°ú½ÃÄÑ ³ª¿Â ¸Þ½ÃÁö´ÙÀÌÁ¦½ºÆ®¸¦ ŰÀÌ·Î ÇØ¼­ ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇØ ¾ÏÈ£È­ÇØ¼­ ÀúÀåÇÑ´Ù.

5.7.2 Digital EnvelopÇÑ ¸Þ½ÃÁöÀÇ ±¸Á¶

Digital EnveopÀ» ÇÑ ¸Þ½ÃÁö´Â ¿ì¼± µÎ°¡Áö·Î ±¸¼ºµÈ´Ù. ù°´Â ´ëĪÇüŰÀÌ(DK)·Î ¾ÏȣȭµÈ ¸Þ ½ÃÁö(EM)¿Í ¼ö½ÅÀÚÀÇ Public Key·Î ¾ÏȣȭµÈ ´ëÆÃÇüŰÀÌ(EDK) µÎ°¡ÁöÀÌ´Ù. ±×¸®°í ¸¹ÀÏ ÀüÀÚ¼­¸í(DS)À» µ¡ºÙÀÎ´Ù¸é ¸Þ½ÃÁö´Â ¼¼°¡Áö ÆÄÆ® ·Î ±¸¼ºµÇ°Ô µÈ´Ù. À̵éÀ» ¾î¶»°Ô ±¸¼ºÇØ¾ß ³ªÁß¿¡ ¾Ïȣȭ¸¦ Ç®±â ÁÁÀ»±î? ÇÏ´Â °í·Áµµ ÇÊ¿äÇÏ ´Ù.
ÀϹÝÀûÀÎ ¹æ¹ýÀº ´ÙÀ½ÀÇ ¼ø¼­¸¦ µû¸¥´Ù.

  1. ¸Þ½ÃÁö(M)¸¦ ´ëĪÇü ŰÀÌ(DK)·Î ¾ÏȣȭÇÑ´Ù.
  2. ±× µÚ¿¡ ´ëĪÇü ŰÀÌ(¼¼¼ÇŰ, DK)¸¦ ¼ö½ÅÀÚÀÇ Public Key·Î ¾ÏȣȭÇÑ´Ù(EDK)
  3. ±× µÚ¿¡ ¾ÕÀÇ µÎ ºÎºÐ Àüü¸¦ ÀÌ¿ëÇØ ÀüÀÚ¼­¸í(DS)À» »ý¼ºÇÑ´Ù.

¸Þ½ÃÁö¸¦ ¼ö½ÅÇÑ Ãø¿¡¼­´Â ¿ª¼ø¼­·Î ¸Þ½ÃÁö¸¦ ±¸ÇÑ´Ù.

  1. ¸Þ½ÃÁöÀÇ ¾ÕÀÇ µÎ ºÎºÐÀ» ÀÌ¿ëÇØ ÀüÀÚ¼­¸íÀ» È®ÀÎÇÑ´Ù.
  2. ÀÚ½ÅÀÇ Private Key·Î ¾ÏȣȭµÈ ´ëĪÇüŰÀÌ(¼¼¼ÇŰ, DK)¸¦ ±¸ÇÑ´Ù.
  3. ±¸ÇÑ ¼¼¼ÇŰ·Î ¾ÏȣȭµÈ ¸Þ½ÃÁö(EM)¸¦ º¹È£È­ÇÑ´Ù.

±×·¯³ª ¹®Á¦´Â ¿©±â¼­ ³¡³ªÁö ¾Ê´Â´Ù. ±×·³ ¸Þ½ÃÁö°¡ ¼¼°¡Áö ÆÄÆ®·Î ±¸ºÐµÇ¾î ÀÖ´Ù¸é ¼¼°¡Áö ÆÄ Æ®¸¦ ¼­·Î ±¸ºÐÇÒ¼ö ÀÖ¾î¾ß Çϴµ¥ ±× ±¸ºÐÀÚ´Â ¹«¾ùÀ¸·Î ÇÒ °ÍÀΰ¡? ¶Ç ±¸ºÐÀÚ´Â ¼­¸í¿¡ ³ÖÀ» °ÍÀΰ¡ ¸»°ÍÀΰ¡? µî ¿©·¯°¡Áö °í·ÁÇÒ Á¡ÀÌ ÀÖ´Ù.

6. °á·Ð

¾Ïȣȭ ¾Ë°í¸®ÁòÀº Àå±âÀûÀ¸·Î ¿¬±¸°³¹ßÇÒ ¼ÒÁö°¡ ¸¹´Ù. ¶ÇÇÑ °­·ÂÇÑ ±¹»ê ¾Ë°í¸®ÁòÀÌ °³¹ßµÇ¸é ¸Å¿ì ȯ¿µÇÒ ¸¸ÇÑ ÀÏÀÌ´Ù. ÃÖ±Ù ±¹»ê ¾Ïȣȭ¾Ë°í¸®ÁòÀÇ °³¹ßÀÌ È°¹ßÇÏ°Ô ÁøÇàµÇ°í ÀִµíÇѵ¥ ´ëÇ¥ÀûÀÎ °ÍÀÌ ¹Ù·Î KDST(Korean Digital Signature Standard)¶ó´Â ¾Ë°í¸®ÁòÀ¸·Î °ÅÀÇ ¿Ï¼º´Ü°è¿¡ ¿Í ÀִµíÇÏ´Ù. ¾ÆÁ÷ °ËÁõµÈ °ÍÀº ¾Æ´Ï°í °ËÁõÀÇ ÀýÂ÷°¡ ÇÊ¿äÇϱä ÇÒ °ÍÀÌ´Ù.
±×·³¿¡µµ ºÒ±¸Çϰí Á¤º¸Åë½ÅºÐ¾ßÀÇ ÀÀ¿ë½Ã½ºÆÀÀº ±¹³»¿¡¼­¸¸ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±¹Á¦ÀûÀÎ Åë ½ÅÀÇ °æ¿ì°¡ ´õ ¸¹ À¸¹Ç·Î ±¹Á¦ÀûÀΠǥÁذúÀÇ È£È¯À» °í·ÁÇÏ¿©¾ß¸¸ÇÑ´Ù. ±×·±Àǹ̿¡¼­ ¾Õ¿¡¼­ ¾ð±Þ¾È RSA, DES, MD5, SHSµî°ú °°Àº ¾Ë°í¸®ÁòµéÀº ¾Ïȣȭ ÀÀ¿ë½Ã½ºÆÀÀÇ ±âº»¿ä¼Ò°¡ µÇ°í ÀÖ´Ù. ¾Ïȣȭ ¾Ë°í¸®ÁòÀ» ¿¬±¸°³¹ßÇÏ´Â ºÐ ¾ßµµ ÇϳªÀÇ ºÐ¾ßÀÌ Áö¸¸ ¾ÏȣȭÀÀ¿ë½Ã½ºÆÀÀ» ȤÀº ¾ÏÈ£ÇÁ·ÎÅäÄÝÀ» °³¹ßÇÏ´ÂÀÏÀº ¶Ç´Ù¸¥ »õ·Î¿î Áß¿äÇÑ ºÐ¾ß°¡¿îµ¥ Çϳª¶ó°í ¸»ÇÏ°í ½Í ´Ù.
¾Ïȣȭ±â¼úÀÌ ¼Ò±ØÀûÀ¸·Î´À Á¤º¸È­ÀÇ °É¸²µ¹ÀÎ Á¤º¸À¯Ãâ, ÇØÅ·µîÀ» ¸·´Â ±à±ØÀûÀÎ ´ë¾ÈÀ¸·Î Ȱ ¿ëµÉ¼öÀÖÀ¸¸ç, Àû±Ø ÀûÀ¸·Î´Â ÀüÀÚ°Å·¡, ÀüÀÚÈ­Æó, ÀüÀÚ¹®¼­À¯Åëµî »çÀ̹ö½ºÆÐÀ̽º»ó¿¡¼­ÀÇ È°µ¿¿¡ ¹ýÀû/°æÁ¦ÀûÀÎ Áö À§¸¦ º¸ÀåÇÏ´Â ´ë¾È À¸·Î¼­ Ȱ¿ëµÉ¼ö ÀÖ´Ù. ±×µ¿¾È ÀÎÅͳÝÀ» ÅëÇØ Àü´Þ¹ÞÀº ÀüÀÚ¿ìÆíÀÇ ³»¿ëÀ» ¹ýÁ¤¿¡¼­ Áõ°Å·Î üÅà µÇÁö ¸øÇß¾ú´Ù. ±× ·¯³ª º¸¾ÈÀüÀÚ¿ìÆíÀÌ È°¼ºÈ­µÇ°í ÀüÀÚ¼­¸í¿¡ ¹ýÀûÀÎ ±ÇÀ§¸¦ ºÎ¿©ÇÑ´Ù¸é ¿ì¸®´Â ÀüÀÚ¿ìÆíÀ¸·Î °è ¾à¼­¸¦ »çÀÎÇÏ°í ±³ ȯÇÒ¼öµµ ÀÖ°ÔµÉ °ÍÀÌ´Ù. ƯÇã½Åû, °ü°ø¼­¿¡ µî·ÏÇÏ´Â ÇàÀ§µîµµ ¸ðµÎ »ç¶÷ÀÌ ¼­·ù¸¦ µé°í Á÷Á¢ µµÀåÀ» Âï°Å³ª ¼­ ¸íÀ» Çϸ鼭 ÇØ¾ßÇÏÁö¸¸ ÀÌ·± ¸ðµç ÇàÀ§µéÀ» Åë½Å»ó ȤÀº »çÀ̹ö½ºÆÐÀ̽º»ó¿¡¼­ °¡´É Çϵµ·ÏÇÏ´Â °ÍÀÌ ¹Ù·Î ¾Ïȣȭ ±â¼úÀÌ´Ù. ÃÖ±Ù Certificate Authority±â¼úÀ» ÀÀ¿ëÇÑ ¼­ºñ½º°¡¿îµ¥ Çϳª°¡ ¹Ù·Î Digital ID(VeriSign)¼­ºñ½ºÀε¥ À̰͵µ ¾Ï ȣȭ±â¼úÀÇ ÀÀ¿ë°¡¿îµ¥ Çϳª·Î¼­ ÀÎÅͳÝÀÇ µðÁöÅ» ȯ°æ¿¡¼­ÀÇ ½ÅºÐÁõ¿ªÇÒÀ» ÇÏ´Â ¼­ºñ½º¸¦ Á¦°ø ÇÏ´Â °ÍÀÌ´Ù. Sigital IDÀÇ º¸Áõ¿ªÇÒÀÌ ¾î´ÀÁ¤µµÀÎÁö´Â ¾Ë¼ö ¾øÁö¸¸ Á¶±Ý¸¸ ¹ßÀüÇÏ¸é µðÁöÅ» º¸Çè¼­ºñ½ºµîµµ °¡´ÉÇÒ °Í ÀÌ´Ù.
¹Ì·¡»çȸ´Â ÄÄÇ»Å͸¦ ÀÌ¿ëÇÑ Åë½ÅÀÌ ¸ðµç »çȸÀÇ Ç÷°ü°ú ½Å°æÀ¸·Î¼­ÀÇ ¿ªÇÒÀ» ÇÒ °ÍÀÌ´Ù. »ç¶÷ ÀÌ Á÷Á¢ ¸¸³ª°í Á÷ Á¢ ¹«¾ð°¡¸¦ ÇÏ´Â °Íº¸´Ù´Â ½Ã°£°ú °ø°£Àû Á¦¾àÀ» Á¤º¸Åë½ÅÀÌ ±Øº¹Çؼ­ ¸¹Àº ÀϵéÀ» Á¤º¸Åë½ÅÀ» ÅëÇØ ó¸®ÇÒ °ÍÀÌ ºÐ¸íÇÏ´Ù. ±×·± µðÁöÅ» Çõ¸íÀÌ ÀϾ´Â ¹Ì·¡»çȸ¿¡´Â µðÁöÅ» Á¤º¸Åë½ÅÀÇ ¾àÁ¡À» º¸¿ÏÇÏ´Â ¾ÏÈ£ È­±â¼úÀÌ ¹Ù·Î Áß¿ä ÇÑ Çٽɱâ¼ú·Î ÀÚ¸®ÀâÀ» °ÍÀÌ´Ù. (³¡)

Âü°í¹®Çå(References)

[SCHNEIER 1996]
BRUCE SCHNEINER, Applied Cryptography , 1996
John Wiley & Sons, Inc
[STALLING 1995]
WILLIAM STALLING, Network and Internetwork Security, 1995
IEEE Press
[GARFINKEL 1995]
SIMSON GARFINKEL, PGP, Pretty Good Privacy, 1995
O'Reilly & Associates, Inc
[KAPP 1996]
STEPHEN KAPP, RSAEURO Reference Manual 1.03,1996
[RSA 19xx]
PKCS(Public Key Cryptography Standard) #1 - #11, 198x-199x
Last-Modified : Sunday, 20-Oct-96 22:11:17 KDT
Copyright 1996 Douglas Guen(dgguen@madang.dacom.co.kr)