Java Security 񃬣
Java Security Technology
¡¡
Ź ¼º¿ì (Sung-Woo Tak) ºÐ»êÄÄÇ»ÆÃ¿¬±¸½Ç ¿¬±¸¿ø
¡¡
¿ä¾à
¡¡
Java ±â¼úÀº ³×Æ®¿öÅ©¸¦ ±â¹ÝÀ¸·Î ÇÏ´Â ÄÄÇ»ÆÃ ½Ã½ºÅÛÀÇ È°¿ë ¹üÀ§¸¦ Áõ´ë ½Ã۰í, ¶ÇÇÑ ºÐ»ê ½Ã½ºÅÛ¿¡¼­ ¹ß»ýµÇ´Â ÀÀ¿ë ÇÁ·Î±×·¥µéÀÇ º¸¼ö ¹× À¯Áö ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥À» Á¦½ÃÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ³×Æ®¿öÅ© ¹× ºÐ»ê ÄÄÇ»ÆÃ ȯ°æ¿¡¼­´Â ¼­¹ö¿¡¼­ Àü¼ÛµÇ¾î ¿Â Java ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Å¬¶óÀÌ¾ðÆ®¿¡¼­ ½ÇÇàµÇ¾î ½Ã½ºÅÛ ÀÚ¿øµéÀ» ÆÄ±«ÇÒ ¼ö ÀÖ´Â »õ·Î¿î Security ¹®Á¦¸¦ ¹ß»ý½ÃŲ´Ù. ÀÌ¿¡ º» °í¿¡¼­´Â Java¿¡¼­ Á¦°øÇÏ´Â ´Ù¾çÇÑ Security ±â¼úÀ» ºÐ¼®ÇÏ¿´°í, À̸¦ ±â¹ÝÀ¸·Î Java¸¦ ³×Æ®¿öÅ© ¹× ºÐ»ê ÄÄÇ»ÆÃ ȯ°æ¿¡ Àû¿ëÇÏ·Á´Â ±â¾÷À̳ª ±â°ü, ȤÀº °³ÀÎ »ç¿ëÀÚ°¡ Java¿¡¼­ Á¦°øÇÏ´Â ´Ù¾çÇÑ Security±â¼úÀ» È¿°úÀûÀ¸·Î ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô ÇϰíÀÚ ÇÑ´Ù.

¡¡

  1. ¼­·Ð
  2. ÀÎÅͳÝÀÇ ±Þ¼ÓÇÑ ¹ßÀü°ú ´õºÒ¾î 1995³â 5¿ù¿¡ ¹ßÇ¥µÈ Java´Â ±âÁ¸ÀÇ ÄÄÇ»ÆÃ ȯ°æÀÎ ¸ÞÀÎÇÁ·¹ÀÓ ¹× Ŭ¶óÀ̾ðÆ®/¼­¹ö ±â¹ÝÀÇ ºÐ»êÄÄÇ»ÆÃ ȯ°æ, ±×¸®°í WWW(World Wide Web)µéÀÌ °¡Áö°í ÀÖ´Â ¸¹Àº Á¦¾àµé¿¡ ´ëÇØ ´Ù¾çÇÑ ÇØ°áÃ¥À» Á¦½ÃÇÏ¿´´Ù[1]. ƯÈ÷ Java·Î ±¸ÇöµÈ ÀÀ¿ë ÇÁ·Î±×·¥Àº ±âÁ¸ÀÇ ÄÄÇ»ÆÃ Ç÷§Æû°ú µ¶¸³ÀûÀ¸·Î ½ÇÇà °¡´ÉÇϸç, ÀÌ·¯ÇÑ ÆÐ·¯´ÙÀÓÀ» ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛÁî(ÀÌÇÏ ½ã)´Â " Write Once, Run AnywhereTM"¶ó´Â ¹®ÀåÀ» ÅëÇØ JavaÀÇ ÇÙ½ÉÀûÀΠƯ¡À» Ç¥ÇöÇÏ¿´´Ù. ±×¸² 1Àº Java·Î ±¸ÇöµÈ ¾ÖÇø´(Applet)ÀÌ ¾Æ¹«·± ¼öÁ¤¾øÀÌ ±âÁ¸ÀÇ ¿î¿µÃ¼Á¦ Ç÷§Æû¿¡¼­ µ¿À۵Ǵ °ÍÀ» º¸¿©ÁØ´Ù.

    ±×¸²1¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ Java ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ë(executable contents)Àº ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼Û(download)µÇ¾î ¿ø°ÝÁö¿¡ ÀÖ´Â »ç¿ëÀÚÀÇ ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàµÇ¾îÁö´Âµ¥ ÀÌ¿Í °°Àº Java ±â¼úÀº ³×Æ®¿öÅ©¸¦ ±â¹ÝÀ¸·Î ÇÏ´Â ÄÄÇ»ÆÃÀÇ ´É·ÂÀ» Áõ´ë½Ãų °ÍÀº Ʋ¸²¾øÁö¸¸ »õ·Î¿î º¸¾È ¹®Á¦¸¦ ¹ß»ý½ÃŲ´Ù.

    ±×¸²1 "Write Once, Run AnywhereTM"¸¦ º¸¿©ÁÖ´Â Java ¼öÇà ¸ðµ¨

    ÀÌ¿¡ º» °í¿¡¼­´Â ÇöÀç Java¿¡¼­ Á¦°øµÇ°í ÀÖ´Â Security ±â¼ú, ±×¸®°í ÇâÈÄ Java¿¡¼­ Á¦°øÇϰíÀÚ ÇÏ´Â Security ±â¼ú¿¡ ´ëÇØ ±â¼úÇÑ´Ù.

    º» °íÀÇ ±¸¼ºÀº ´ÙÀ½°ú °°´Ù. IIÀå¿¡¼­´Â ÀϹÝÀûÀÎ Security ¿ä±¸»çÇ׿¡ ´ëÇÑ ³»¿ëÀ» ±â¼úÇϰí, IIIÀå¿¡¼­´Â JDK1.0ºÎÅÍ Á¦°øÇÏ´ÂSecurity ±â¹ýÀÎ Sandbox¸¦ ºÐ¼®Çϰí, IVÀå¿¡¼­´Â JDK1.1¿¡¼­ Áö¿øÇÏ´Â È®ÀåµÈ Security ±â¹ýÀ» ±â¼úÇÑ´Ù. VÀå¿¡¼­´Â ÇâÈÄ Á¦°ø ¿¹Á¤ÀÎ Java Security±â¼úÀ» »ìÆìº¸°í, ¸¶Áö¸·À¸·Î VIÀå¿¡¼­ °á·ÐÀ» ¸Î´Â´Ù.

    ¡¡

  3. ³×Æ®¿öÅ© ȯ°æÇÏ¿¡¼­ÀÇ Security ¿ä±¸ »çÇ× ºÐ¼®
½ÇÇà °¡´ÉÇÑ ÀÀ¿ëÀÌ ³×Æ®¿öÅ©¸¦ ÅëÇØ ¿ø°ÝÁö ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàµÉ °æ¿ì ½Ã½ºÅÛ³»ÀÇ Æ¯Á¤ÇÑ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀÌ ¿ä±¸µÈ´Ù. ±×·¯³ª, ½ÇÇà °¡´ÉÇÑ ÀÀ¿ë ÇÁ·Î±×·¥Àº ±âº»ÀûÀ¸·Î º¸¾È ¹®Á¦¸¦ ½Å·ÚÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ÀÚ¿ø Á¢±Ù¿¡ ´ëÇÑ Á¦¾î°¡ ÇÊ¿äÇÏ´Ù [2]. µû¶ó¼­, Java ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ë ÇÁ·Î±×·¥À» ¿ø°ÝÁö ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàÇÒ °æ¿ì ÄÄÇ»ÅÍ ½Ã½ºÅÛ ÀÚ¿øµé¿¡ ´ëÇØ Á¦¾îÇÒ ¼ö ÀÖ´Â Security ±â¼úÀÌ ÇÊ¿äÇÏ´Ù. ÀϹÝÀûÀÎ ÄÄÇ»ÅÍ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ À§Çù ¿ä¼Ò·Î´Â ³ëÃâ, Ȱ¿ë¼º, ¹«°á¼º, ±×¸®°í ºÒÄè°¨ÀÌ ÀÖ´Ù. À̵é À§Çù ¿ä¼Òµé¿¡ ´ëÇÑ ¿¹´Â Ç¥ 1°ú °°´Ù.
<Ç¥1> ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ À§Çù ¿ä¼Òµé
 
À§Çù ¿ä¼Ò
³» ¿ë
³ëÃâ
(Disclosure)
  • °³ÀÎÀûÀÎ Á¤º¸ À¯Ãâ
Ȱ¿ë¼º
(Usability)
  • °úµµÇÑ ¸Þ¸ð¸® ÇÒ´ç
  • ¼öõ°³ÀÇ ½ÇÇà À©µµ¿ì »ý¼º
  • ¿ì¼± ¼øÀ§°¡ ³ôÀº ÇÁ·Î¼¼½º ȤÀº, ¾²·¹µå »ý¼º
¹«°á¼º
(Integrity)
  • ÆÄÀÏÀÇ ¼öÁ¤/»èÁ¦
  • »ç¿ëÁßÀÎ ÄÄÇ»ÅÍ ½Ã½ºÅÛ³»ÀÇ ¸Þ¸ð¸® ³»¿ë º¯°æ
  • »ç¿ëÁßÀÎ ÇÁ·Î¼¼½º ȤÀº, ¾²·¹µåÀÇ ½ÇÇà Á¾°á
ºÒÄè°¨
(Annoyance)
  • ¸ð´ÏÅÍ¿¡ À½¶õ¹° Ç¥½Ã
  • ½ºÇÇÄ¿¸¦ ÅëÇØ ¿øÇÏÁö ¾Ê´Â ¼Ò¸®¸¦ »ý¼º
¡¡

±×¸®°í, Ç¥2´Â Ç¥1¿¡¼­ »ìÆì º» ÄÄÇ»ÅÍ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ À§Çù ¿ä¼Ò¿¡ ´ëÇØ Java ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛÀÇ ÀÚ¿ø ¿ä¼ÒµéÀ» º¸¿©ÁØ´Ù.

Java¿¡¼­´Â ÀÌ·¯ÇÑ À§Çù ¿ä¼Ò¿¡ ´ëÇÑ ±âº»ÀûÀÎ Security¸¦ Á¦°øÇϰí ÀÖÀ¸¸ç, ¶ÇÇÑ Security Á¤Ã¥ ¼ö¸³ÀÚÀÇ Security ¹æÄ§ ³»¿ë¿¡ µû¶ó ¼öÁ¤ ¹× È®Àå °¡´ÉÄÉ ÇÏ´Â ±â¼úÀ» Á¦°øÇÑ´Ù. ÇöÀç ½Ã½ºÅÛ ÀÚ¿øµé¿¡ ´ëÇÑ Á¢±Ù Çã¿ëÀº Java ¾îÇø®ÄÉÀ̼Ç(application) ¹× ¾ÖÇø´ ºä¾î(viewer) , ±×¸®°í ³×Æ®¿öÅ©¿¡¼­ Àü¼ÛµÈ Java ¾ÖÇø´À» ¼öÇàÇÒ ¼ö ÀÖ´Â À¥ ºê¶ó¿ìÀú(¿¹: ³Ý½ºÄÉÀÌÇÁ»çÀÇ ³×ºñ°ÔÀÌÅÍ, ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®»çÀÇ ÀÎÅÍ³Ý ÀͽºÇ÷ξî) µî¿¡ µû¶ó ´Ù¸£´Ù. ´ÙÀ½ Ç¥ 3¿¡¼­´Â Çã¿ë °¡´ÉÇÑ ½Ã½ºÅÛ ÀÚ¿ø Á¢±ÙÀÇ ¿©ºÎ¸¦ ³Ý½ºÄÉÀÌÇÁ»çÀÇ À¥ ºê¶ó¿ìÀúÀÎ ³×ºñ°ÔÀÌÅÍ 2.x ÀÌ»ó ¹öÀü ¹× JDK³»ÀÇ ¾ÖÇø´ ºä¾î, ±×¸®°í Java ¾îÇø®ÄÉÀÌ¼Ç º°·Î ºñ±³ÇÏ¿© Á¦½ÃÇÏ¿´´Ù[3].

<Ç¥2> Java ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ëÀÌ °ø°ÝÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛÀÇ ÀÚ¿ø ¿ä¼Òµé
 
ÀÚ¿ø
³ëÃâ
Ȱ¿ë¼º
¹«°á¼º
ºÒÄè°¨
ÆÄÀÏ ½Ã½ºÅÛ
¡Û
¡Û
¡Û
¡Û
³×Æ®¿öÅ©
¡Û
¡Û
¸Þ¸ð¸®
¡Û
¡Û
¡Û
¡Û
Ãâ·Â ÀåÄ¡(¸ð´ÏÅÍ, ½ºÇÇÄ¿ µî)
¡Û
ÀÔ·Â ÀåÄ¡(Űº¸µå, ¸¶ÀÌÅ© µî)
¡Û
¡Û
¡Û
ÇÁ·Î¼¼½º Á¦¾î
¡Û
¡Û
»ç¿ëÀÚ È¯°æ
¡Û
¡Û
¡Û
½Ã½ºÅÛ Ä¿³Î È£Ãâ
¡Û
¡Û
¡Û
¡Û
¡¡

Ç¥ 3¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ NNÀÎ °æ¿ì¿¡´Â Security Á¤Ã¥ÀÌ ¸Å¿ì ¾ö°ÝÇϰí, JSÀÎ °æ¿ì¿¡´Â ±âÁ¸ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥°ú °°ÀÌ ´ëºÎºÐÀÇ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù. Áï, ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÇ¾î¿Â ¾ÖÇø´Àº ½Ã½ºÅÛ Á¢±Ù¿¡ ´ëÇÑ ¸¹Àº Á¦¾àÀÌ µû¸£³ª, ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ÀÐÇôÁ® µ¿À۵Ǵ Java ¾îÇø®ÄÉÀ̼ÇÀº ´ëºÎºÐÀÇ ½Ã½ºÅÛ ÀÚ¿ø¿¡ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.

ÇÑÆí, Ç¥ 3¿¡¼­´Â Ç¥ 2¿¡¼­ ¾ð±ÞÇÑ ½Ã½ºÅÛ ÀÚ¿ø Áß ¸Þ¸ð¸®, Ãâ·Â ÀåÄ¡, ÀÔ·Â ÀåÄ¡, ÇÁ·Î¼¼½º Á¦¾î, ½Ã½ºÅÛ Ä¿³Î È£Ãâ µî°ú °°Àº ºÎºÐÀÇ ³»¿ëÀÌ ºüÁ® ÀÖ´Ù. ÀÌµé °¢°¢¿¡ ´ëÇØ »ìÆì º¸¸é ´ÙÀ½°ú °°´Ù.

¸ÕÀú ¸Þ¸ð¸®¿¡ ´ëÇÑ º¸È£´Â Java ¾ð¾î ¸í¼¼¿¡ ÀÇÇØ ±âº»ÀûÀ¸·Î ÀÌ·ç¾îÁø´Ù. ÀÌ¹Ì ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ ´ëÇÑ ¾ÖÇø´ÀÇ Á¢±ÙÀº °¡´ÉÇÏÁö ¾ÊÀ¸³ª, ¾ÖÇø´ÀÌ °´Ã¼¸¦ »ý¼ºÇÏ¿© ÇöÀçÀÇ ÀÌ¿ë °¡´ÉÇÑ ¸Þ¸ð¸®¸¦ °ú´ÙÇÏ°Ô ÇÒ´çÇÏ´Â À§Çù ¿ä¼Ò¿¡ ´ëÇÑ º¸È£ ÀÛ¿ëÀº Á¸Àç ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ÀÌ·¯ÇÑ ¾ÖÇø´ÀÇ °ú´ÙÇÑ ¸Þ¸ð¸® ÇÒ´ç ¿ä±¸´Â Á÷Á¢ÀûÀÎ À§ÇùÀ» Á¦°øÇÏÁö ¸øÇÑ´Ù. ÀϹÝÀûÀ¸·Î À¥ ºê¶ó¿ìÀú´Â Java°¡ »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸®ÀÇ ¾çÀ» Á¦ÇÑÇϱ⠶§¹®¿¡ ¾ÖÇø´ÀÇ °ú´ÙÇÑ ¸Þ¸ð¸® ÇÒ´ç ¿ä±¸´Â Ä¡¸íÀû À§Çù ¿ä¼Ò´Â ¾Æ´Ï¸ç, ¶ÇÇÑ À¥ ºê¶ó¿ìÀú´Â ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÈ ¾ÖÇø´ÀÌ °úµµÇÑ ¸Þ¸ð¸® ÇÒ´çÀ» ¿ä±¸ÇÏ´Â °æ¿ì, ¾ÖÇø´À» Á¾°á ½ÃŰ´Â ¸Þ½îµå(method)¸¦ °¡Áö°í Àֱ⠶§¹®¿¡ ¾ÖÇø´ÀÇ °úµµÇÑ ¸Þ¸ð¸® ÇÒ´ç ¿ä±¸¸¦ ¸·À» ¼ö ÀÖ´Ù.

<Ç¥3> Java ¾ÖÇø´ ¹× ¾îÇø®ÄÉÀ̼ǿ¡¼­ Çã¿ë °¡´ÉÇÑ ½Ã½ºÅÛ ÀÚ¿ø Á¢±Ù ¿©ºÎ
 
Á¢±Ù °¡´ÉÇÑ ½Ã½ºÅÛ ÀÚ¿ø
NN
NL
AN
AL
JS
Read file in /home/me (/home/me µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» ÀÐÀ» °æ¿ì)

acl.read = null (Àб⿡ ´ëÇÑ Á¢±Ù ±ÇÇÑ(access control)À» ºÎ¿©ÇÏÁö ¾ÊÀ½)

X
X
X
¡Û
¡Û
Read file in /home/me,

acl.read = /home/me (/home/me µð·ºÅ丮¿¡¸¸ ÀÖ´Â ÆÄÀÏÀ» ÀÐÀ» ¼ö ÀÖ´Â Á¢±Ù ±ÇÇÑ(access control)À» ºÎ¿©ÇÔ)

X
X
¡Û
¡Û
¡Û
Write file in /tmp (/tmp µð·ºÅ丮¿¡ ÆÄÀÏÀ» »ý¼º ¹× ¼öÁ¤ÇÒ °æ¿ì)

acl.write = null (»ý¼º ¹× ¼öÁ¤ ±ÇÇÑÀ» ÁÖÁö ¾ÊÀ½)

X
X
X
¡Û
¡Û
Write file in /tmp,

acl.write =/tmp (/tmp µð·ºÅ丮¿¡¸¸ ÀÖ´Â ÆÄÀÏÀ» »ý¼ºÇϰųª ¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¢±Ù ±ÇÇÑ(access control)À» ºÎ¿©ÇÔ)

X
X
¡Û
¡Û
¡Û
Get file info, (ÆÄÀÏÀÇ Á¤º¸¸¦ ¾ò°íÀÚ ÇÔ)

acl.read=null (Àб⠱ÇÇÑÀ» ºÎ¿©ÇÏÁö ¾ÊÀ½

acl.write=null (¾²±â ±ÇÇÑÀ» ºÎ¿©ÇÏÁö ¾ÊÀ½)

X
X
X
¡Û
¡Û
Get file info, 

acl.reame=/home/me (/home/me µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ¿¡ ´ëÇÑ Àб⠱ÇÇÑÀ» ºÎ¿©ÇÔ)

acl.reame=/tmp (/tmp µð·ºÅ丮¿¡ ÆÄÀÏÀ» »ý¼ºÇϰųª ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ºÎ¿©ÇÔ)

X
X
¡Û
¡Û
¡Û
Delete file (ÆÄÀÏ »èÁ¦)

Using File.delete() (Java ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ °æ¿ì)

X
X
X
X
¡Û
Delete file,

Using exec /usr/bin/rm(¿ÜºÎ exec¸¦ ÀÌ¿ëÇÏ¿© ½ÇÇà ¸í·ÉÀÎ rmÀ» »ç¿ëÇÑ °æ¿ì)

X
X
X
¡Û
¡Û
Read the user.name

Property (»ç¿ëÀÚ Á¤º¸ ¾ò±â)

X
¡Û
X
¡Û
¡Û
Make network connections except to the host that it came from (¾ÖÇø´ÀÌ ½ÇÇàµÇ´Â Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ¾ÖÇø´À» Àü¼ÛÇÑ ¼­¹ö¸¦ Á¦¿ÜÇÑ ´Ù¸¥ ½Ã½ºÅÛ°ú Åë½ÅÀ» ÇϰíÀÚ ÇÒ °æ¿ì)
X
¡Û
X
¡Û
¡Û
Load library (½Ã½ºÅÛ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÔ)
X
¡Û
X
¡Û
¡Û
Exit() (¾ÖÇø´ÀÌ ½Ã½ºÅÒ È£Ãâ ¸í·ÉÀÎ Exit¸¦ È£ÃâÇÒ °æ¿ì¿¡ ¾ÖÇø´ÀÌ µ¿À۵ǰí ÀÖ´Â À¥ ºê¶ó¿ìÀú ÀÚü°¡ Á¾°áµÇ´Â °á°ú¸¦ ¹ß»ý½ÃÅ´)
X
X
X
¡Û
¡Û
Create a popup window without a warning (popup À©µµ¿ì¸¦ »ý¼ºÇϰíÀÚ ÇÒ °æ¿ì)
X
¡Û
X
¡Û
¡Û
¡¡

±¸ºÐ:

  1. NN: ³×Æ®¿öÅ©À» ÅëÇØ Àü¼ÛµÈ ¾ÖÇø´ÀÌ ³Ý½ºÄÉÀÌÇÁ ³×ºñ°ÔÀÌÅÍ 2.x ÀÌ»ó ¹öÀü¿¡¼­ ½ÇÇàµÇ´Â °æ¿ì
  2. NL: ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ÀÐÀº ¾ÖÇø´ÀÌ ³Ý½ºÄÉÀÌÇÁ ³×ºñ°ÔÀÌÅÍ 2.x ÀÌ»ó ¹öÀü¿¡¼­ ½ÇÇàµÇ´Â °æ¿ì
  3. AN: ³×Æ®¿öÅ©À» ÅëÇØ Àü¼ÛµÈ ¾ÖÇø´ÀÌ JDK 1.x¿¡ ÀÖ´Â ¾ÖÇø´viewer¿¡¼­ ½ÇÇàµÇ´Â °æ¿ì
  4. AL: ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ÀÐÀº ¾ÖÇø´ÀÌ JDK 1.x¿¡ ÀÖ´Â ¾ÖÇø´viewer¿¡¼­ ½ÇÇàµÇ´Â °æ¿ì
  5. JS: Java ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÇÇàµÇ´Â °æ¿ì
¡¡

ÇÑÆí, ¾ÖÇø´Àº Á÷Á¢ÀûÀ¸·Î Ãâ·ÂÀåÄ¡¿¡ Á¢±ÙÇÒ ¼ö ¾øÀ¸¸ç, ´ë½Å¿¡ Java ¶óÀ̺귯¸®¿¡¼­ Á¦°øÇÏ´Â ¹æ¹ý¸¸À» »ç¿ëÇÔÀ¸·Î½á Ãâ·Â ÀåÄ¡¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ±×¸®°í, ¾ÖÇø´Àº Űº¸µå ÀÔ·ÂÀ̳ª ¸¶¿ì½º ÀåÄ¡¸¦ ÅëÇØ¼­¸¸ Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸ç, ÀԷ¿¡ ´ëÇÑ Æ¯º°ÇÑ Á¢±Ù Á¦ÇÑÀº ¾ø´Ù.

¾ÖÇø´ÀÇ ¾²·¹µå¿¡ ´ëÇÑ Á¢±ÙÀº ¸Å¿ì Á¦ÇÑÀûÀ̾ ¾ÖÇø´Àº ¾²·¹µå¿¡ ´ëÇÑ Á¦¾î ±ÇÇÑÀ» °¡ÁöÁö ¸øÇÑ´Ù. ¶ÇÇÑ, ¾ÖÇø´ÀÇ ½Ã½ºÅÒ Ä¿³Î È£Ã⠺κп¡ ´ëÇÑ Á¢±Ùµµ ¸Å¿ì Á¦ÇÑÀûÀÌ´Ù.

ÀÌ¿Í °°ÀÌ ¾ÖÇø´Àº ¸Å¿ì Á¦ÇÑµÈ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù ±ÇÇѸ¸À» °¡Áö°í ½ÇÇàµÊÀ¸·Î½á, Security¿¡ ´ëÇÑ ¾ÈÀü¼ºÀ» Á¦°øÇÑ´Ù.

¡¡

  1. Java Security ±âº» ±â´É
ÀÌ Àå¿¡¼­´Â Java Security ¸ðµ¨ÀÇ ´Ü°èº° ¹ßÀü ÇöȲÀ» ¼Ò°³Çϰí, Java¿¡¼­ Á¦°øÇÏ´Â Security ¸ðµ¨ÀÎ Sandbox¿Í Java ¾ð¾îÀÚü°¡ Á¦°øÇÏ´Â Security ±â´ÉÀ» ±â¼úÇÑ´Ù.

¡¡

  1. Java Security ¸ðµ¨ÀÇ ´Ü°èº° ¹ßÀü ÇöȲ
Java´Â JDK1.0ºÎÅÍ JDK1.1±îÁö ¹ßÀüÇϸ鼭 Security ºÎºÐ¿¡ ´ëÇÑ ¸¹Àº º¯È­°¡ ÀÖ¾úÀ¸¸ç, ¾ÕÀ¸·Î ³ª¿Ã JDK1.2¿¡´Â ±âÁ¸ÀÇ Security±â´Éº¸´Ù Åõ¸í¼º ¹× À¯¿¬¼ºÀ» ºÎ°¢½ÃŰ´Â ±â´ÉµéÀ» Á¦°øÇÒ ¿¹Á¤ÀÌ´Ù. ¾ÕÀÇ Ç¥ 4´Â Java Security ¸ðµ¨ÀÇ ´Ü°èº° ¹ßÀü ÇöȲÀ» º¸¿©ÁØ´Ù.

¡¡

<Ç¥4> Java Security ¸ðµ¨ÀÇ ´Ü°èº° ¹ßÀü ÇöȲ
 
JDK 1.0
(1996³â 1¿ù)
JDK 1.1
(1997³â 1¿ù)
JDK 1.2
(¹ÌÁ¤)
  • Sandbox ±â¼ú
  • JDK1.0¿¡¼­ Á¦°øÇÏ´Â Security±â¼ú Áö¿ø
  • DSA, MD5, ±×¸®°í SHA¸¦ ÀÌ¿ëÇÑ ÀüÀÚ ¼­¸í(Digital Signature) ±â¼ú
  • X.509v1 ÀÎÁõ¼­ (Certificate)
  • ³×Æ®¿öÅ© Security (Java À¥ ¼­¹ö ¹× HotJava¿¡¼­ SSL(Secure Socket Layer)Áö¿ø)
  • Á¦3ÀÇ ¾÷ü(Third Party)¿¡¼­ Á¦°øÇÏ´Â ¾Ïȣȭ ¾Ë°í¸®µëÀ» ¼ö¿ëÇÏ´Â È®Àå±â´É
  • JDK1.1¿¡¼­ Á¦°øÇÏ´Â Security±â¼ú Áö¿ø
  • Java Protected Domain ±â¼ú
  • Çâ»óµÈ Á¢±ÙÁ¦¾î(access control) ±â¼ú
  • º¸´Ù À¯¿¬ÇÑ ½Ã½ºÅÛ ÀÚ¿ø °ü¸®
  • Åø ±â¹ÝÀÇ Security ȯ°æ ¼³Á¤ ±â´É
  • SKIP(Simple Key Management Internet Protocol) Áö¿ø
  • °¨½Ã(Auditing) ±â´É
  • X.509v3 ±â¹ÝÀÇ ÀÎÁõ¼­ ¹× ¿Â¶óÀÎ ÀÎÁõ ¼­¹ö Áö¿ø
  • ¡¡
    1. SandBox 񃬣
    1. SandBox °³¿ä
    2. Java°¡ Á¦°øÇÏ´Â ±âº»ÀûÀÎ Security ¸ðµ¨ÀÎ Sandbox´Â ¹Ì±¹ÀÇ °¡Á¤Áý µÚ¶ã¿¡¼­ Àå³­Ä¡´Â ¾î¸°À̵éÀÇ ¹°¸®ÀûÀÎ ºÎ»óÀ» ¸·±â À§ÇÑ ¸ð·¡Åë(Sandbox)¿¡¼­ Àǹ̸¦ °¡Á®¿Ô´Ù. ÀÌ¿Í °°ÀÌ Java¿¡¼­µµ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù Á¦ÇÑÀ» À§ÇØ JVM(Java Virtual Machine) ¿µ¿ª³»¿¡ Sandbox¸¦ ¸¸µé¾î ¾ÈÀüÇÑ Security¸¦ Á¦°øÇÑ´Ù [4][5][6]. JVM³»ÀÇ SandboxÀÇ À§Ä¡´Â ±×¸² 2¿Í °°´Ù.

      ±×¸²2 JVM³»ÀÇ SandboxÀÇ À§Ä¡

      ±×¸² 2¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ Java´Â ±âº»ÀûÀ¸·Î ·ÎÄ®(Local) ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ½ÇÇàµÇ´Â ¾ÖÇø´°ú ¾îÇø®ÄÉÀ̼ÇÀº ½Å·Ú¼ºÀÌ ÀÖ´Â ½ÇÇà°¡´ÉÇÑ ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î °£ÁÖÇÏ¿© ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀÌ °¡´ÉÇÏÁö¸¸, ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÈ ¾ÖÇø´Àº ½Å·Ú¼ºÀÌ ¾ø´Â °ÍÀ¸·Î °£ÁÖÇÏ¿© ¹Ýµå½Ã Sandbox³»¿¡ ÀÖ´Â Security Á¤Ã¥¿¡ µû¶ó ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦ÇÑÇÑ´Ù. Áï, Sandbox¿¡ ÀÇÇØ Á¢±ÙÀÌ Çã¿ëµÈ ¾ÖÇø´Àº ÀÚ½ÅÀÇ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖÁö¸¸, Sandbox¿¡ ÀÇÇØ ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛÀÇ Á¢±ÙÀÌ Çã¿ëµÇÁö ¾Ê´Â ¾ÖÇø´Àº ·ÎÄ® ÆÄÀÏÀ» Àаųª º¯°æÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ ¼Õ»óÀ» ÀÔÈ÷Áö ¾Ê´Â´Ù. Java¿¡¼­´Â Security Ã¥ÀÓÀÚµéÀÌ Sandbox¸¦ ½Ã½ºÅÛÀÇ °íÀ¯ Ư¼º¿¡ ÀûÇÕÇÑ Security Á¤Ã¥À» ¼ö¿ëÇÒ ¼ö ÀÖ´Â Ç÷§ÆûÀ¸·Î ÀüȯÇÒ ¼ö ÀÖ´Â ±â¼úÀ» Á¦°øÇÑ´Ù.

      ÇÑÆí, ¾ÖÇø´ÀÇ ÀÚ¿ø Á¢±Ù¿¡ ´ëÇÑ ºÎºÐÀº ÀÚµ¿ÀûÀ¸·Î Sandbox¸¦ ÅëÇØ Á¦ÇѵǾîÁö¹Ç·Î »ç¿ëÀÚ´Â ½Ã½ºÅÛ³»ÀÇ º¸¾ÈÀ» °í·ÁÇÒ Çʿ䰡 ¾ø´Ù. µû¶ó¼­ ¾Õ¼­ »ìÆìº» ¹Ù¿Í °°ÀÌ Java Security º¸¾È ¸ðµ¨Àº »ç¿ëÀÚ°¡ Á÷Á¢ Security Á¤Ã¥À» °í·ÁÇØ¾ß ÇÏ´Â ±âÁ¸ÀÇ Security ¸ðµ¨º¸´Ù »ç¿ëÀÚ Æí¸®¼º Ãø¸é¿¡¼­ ÈξÀ ¿ì¼öÇÔÀ» º¸¿©ÁØ´Ù.

      ¡¡

    3. SandboxÀÇ ±¸¼º
    Sandbox´Â Class Loader, Bytecode Verifier, ±×¸®°í Security ManagerÀÎ ¼¼°¡Áö ÄÄÆ÷³ÍÆ®·Î ±¸¼ºµÇ¾î ÀÖ´Ù[7]. °¢ ÄÄÆ÷³ÍÆ®´Â ½Ã½ºÅÛÀÇ ½Å·Ú¼ºÀ» À¯ÁöÇϴµ¥ Áß¿äÇÑ ¿ªÇÒÀ» ¼öÇàÇϸç, Å©°Ô ´ÙÀ½°ú ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ¡¡

    ÀÌµé ¼¼°¡Áö ÄÄÆ÷³ÍÆ®¸¦ ÅëÇØ ³×Æ®¿öÅ©¿¡¼­ Àü¼ÛµÈ ¾ÖÇø´ÀÇ Security ó¸® °úÁ¤Àº ±×¸² 3°ú °°´Ù[8].

    ±×¸²3 ³×Æ®¿öÅ©¿¡¼­ Àü¼ÛµÈ ¾ÖÇø´ÀÇ Security ó¸® °úÁ¤

    ¸ÕÀú, Ŭ¶óÀ̾ðÆ®ÀÇ À¥ ºê¶ó¿ìÀú´Â ³×Æ®¿öÅ©¿¡ ¿¬°áµÇ¾î ÀÖ´Â ¼­¹ö·ÎºÎÅÍ Àü¼ÛµÈ ¾ÖÇø´À» ÀÚ½ÅÀÇ À¥ ºê¶ó¿ìÀú³»¿¡¼­ ½ÇÇà½Ã۱â À§ÇÑ Ã¹¹øÂ° ´Ü°è·Î Ŭ·¡½º ·Î´õ(Class Loader)¸¦ È£ÃâÇÏ¸ç ´ÙÀ½°ú °°Àº ±â´É ¼öÇàÀ» ÅëÇÏ¿© ¾ÖÇø´ÀÌ Å¬·¡½º¸¦ ¾ðÁ¦ ¾î¶»°Ô ·ÎµåÇÒ ¼ö Àִ°¡¸¦ °áÁ¤ÇÑ´Ù.

    ¡¡

    Ŭ·¡½º ·Î´õ´Â ±×¸² 4¿Í °°ÀÌ Å¬·¡½º°¡ ¹ß»ýÇÑ À§Ä¡¸¦ ±â¹ÝÀ¸·Î ÇÏ¿© À̸§ °ø°£À» °ü¸® ¹× ÀÌ¿ëÇÏ¿© Ŭ·¡½º°¡ ·ÎÄ® Ŭ·¡½ºÀΰ¡ ȤÀº ³×Æ®¿öÅ©¸¦ ÅëÇÏ¿© ¿Â Ŭ·¡½ºÀΰ¡¸¦ ±¸ºÐÇϰí Ŭ·¡½ºÀÇ ½Å·Ú¼º ¿©ºÎ¸¦ ÆÇ´ÜÇÑ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á Ŭ·¡½º ·Î´õ´Â ½Å·Ú¼ºÀÌ ¾ø´Â ¾ÖÇø´ÀÌ Çã°¡ ¹ÞÁö ¾ÊÀº ½Ã½ºÅÛ ÀÚ¿ø(¿¹: ·ÎÄ® ÆÄÀÏ)¿¡ ´ëÇÑ Á¢±ÙÀ» ¸øÇÏ°Ô ÇÑ´Ù.

    ±×¸²4 Class Loader³»¿¡ »ý¼ºµÇ´Â Name Space ±¸Á¶

    ÇÑÆí, ¹ÙÀÌÆ®ÄÚµå·Î ±¸¼ºµÈ ¾ÖÇø´Àº Ŭ·¡½º ·Î´õ¿¡ ÀÇÇØ ½ÇÇàµÇ±â ÀÌÀü¿¡ Bytecode Verifier¿¡ ÀÇÇØ °ËÁõÀ» ¹Þ´Â´Ù.

    Bytecode Verifier´Â Ŭ·¡½º ÆÄÀÏÀÌ ¿Ã¹Ù¸¥ ÇüÅ·Π±¸¼ºµÇ¾î ÀÖ´ÂÁö¸¦ È®ÀÎÇÏ¿© Java ÄÄÆÄÀÏ·¯ÀÇ Àû¹ýÇÑ »ç¾ç¿¡ µû¶ó »ý¼ºµÈ ¹ÙÀÌÆ®ÄÚµåÀÎÁö¸¦ °Ë»çÇÑ´Ù. À̿ܿ¡µµ Bytecode Verifier´Â Àü¼ÛµÇ¾î¿Â ¹ÙÀÌÆ®Äڵ尡 ½Ã½ºÅÛ³»¿¡¼­ ½ºÅà ¿À¹öÇ÷οì, ȤÀº ¾ð´õÇ÷ο찡 ¹ß»ýµÇ´ÂÁö¸¦ °Ë»çÇϰí, ¸í·É¾î ¹× ÆÄ¶ó¹ÌÅͰ¡ ¿Ã¹Ù¸¥Áö¸¦ È®ÀÎÇϸç, ºÎÀûÀýÇÑ ·¹Áö½ºÅÍ Á¢±Ù ¿©ºÎ¸¦ °Ë»çÇÑ´Ù. Bytecode Verifier°úÁ¤À» ÅëÇØ 1Â÷ÀûÀÎ Security ó¸® °úÁ¤ÀÌ ³¡³ª¸é, ¾Õ¼­ ±â¼úÇÑ °Íó·³ Ŭ·¡½º ·Î´õ¿¡ ÀÇÇØ ¶Ç Çѹø Security ó¸® °úÁ¤À» °ÅÄ£´Ù. Ŭ·¡½º ·Î´õ¸¦ ÅëÇÑ µÎ ¹øÂ° ´Ü°èÀÎ Security ó¸® °úÁ¤ÀÌ ³¡³ª¸é, ¼¼ ¹øÂ° ´Ü°èÀÎ Security Manager°¡ ¼öÇàµÈ´Ù.

    Security Manager´Â ¾ÖÇø´ ½ÇÇà½Ã ÄÄÇ»ÅÍ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦¾îÇϸç, ¶ÇÇÑ À§Ç轺·¯¿î ¸Þ½îµå(dangerous method)¿¡ ´ëÇÑ °ËÁõÀ» ÇÑ´Ù. À§Ç轺·¯¿î ¸Þ½îµå¶õ ÆÄÀÏ I/O, ³×Æ®¿öÅ© Á¢±ÙÀÌ ¿ä±¸µÇ´Â ¸Þ½îµå³ª »õ·Î¿î Ŭ·¡½º ·Î´õ¸¦ Á¤ÀÇÇϰíÀÚ ÇÏ´Â ¸Þ½îµå µîÀ» ¸»ÇÑ´Ù. ¾î´À °æ¿ì¿¡³ª Security Manager´Â °ÅºÎ±ÇÀ» Çà»çÇϴµ¥ ¿¹·Î½á, ¾ÖÇø´ÀÌ ¡°read¡± ¸Þ½îµå¸¦ È£ÃâÇϸé, JVMÀº Security Manager¸¦ ÂüÁ¶ÇÏ¿© ±× ¾ÖÇø´ÀÌ ½Å·Ú¼ºÀÌ ÀÖ´Ù°í ÆÇ´ÜµÇ¸é ¡°read¡± ¸Þ½îµå´Â ¾ÖÇø´À» ½ÇÇà½Ã۰í, ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â ¿¡·¯°¡ ¹ß»ýµÇ¾î ½ÇÇàÀ» ÁßÁö ½ÃŲ´Ù. ÀÌ·¯ÇÑ Security Manager¸¦ ÅëÇÑ Á¢±Ù Á¦¾î´Â ±âÁ¸ÀÇ Security ±â´ÉÀ» È®ÀåÇϰųª »õ·Î¿î Security ±â´ÉÀ¸·Î ±¸ÇöµÇ¾î ó¸®µÉ ¼ö ÀÖ´Ù. ¸¸¾à Security Manager°¡ ±¸ÇöµÇ¾î ÀÖÁö ¾ÊÀ» °æ¿ì¿¡´Â ¾ÖÇø´Àº Java ¾îÇø®ÄÉÀ̼ǰú °°Àº Á¢±Ù ±ÇÇÑÀ» °¡Áú ¼ö ÀÖ´Ù. Ç¥ 3¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ ³×ºñ°ÔÀÌÅÍ¿Í °°Àº À¥ ºê¶ó¿ìÀú°¡ ¾ÖÇø´À» ½ÇÇàÇÒ °æ¿ì ¾ÖÇø´ÀÇ ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Ê´Â °ÍÀº ³×ºñ°ÔÀÌÅÍ JVM³»¿¡ ÀÖ´Â Security Manager°¡ ÆÄÀÏ ½Ã½ºÅÛ¿¡ ´ëÇÑ Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. À̿ܿ¡µµ Security Manager¿¡¼­´Â ¼ÒÄÏ(socket) ÀÛµ¿ °ü¸®, ¾²·¹µå(thread) °ü¸®, Class Loader °ü¸® µî°ú °°Àº ±â´ÉµéÀ» ¼öÇàÇÑ´Ù.

    ÀÌ·¯ÇÑ Security Manager¸¦ ±¸ÇöÇϱâ À§Çؼ­´Â JDK¿¡¼­ Á¦°øÇÏ´Â SecurityManager Ŭ·¡½º¿Í SecurityManager Ŭ·¡½º¿¡¼­ Á¦°øµÇ´Â checkXXX() ¸Þ½îµå¸¦ ÀÌ¿ëÇÑ´Ù. Java¿¡¼­´Â ÆÄÀÏ ½Ã½ºÅÛ, ¼ÒÄÏ, ¾²·¹µå, Ŭ·¡½º ·Î´õµî ½Ã½ºÅÛ ÀÚ¿øÀÇ Á¾·ù¿¡ µû¶ó Á¦°øµÇ´Â checkXXX() ¸Þ½îµåÀÇ Á¾·ù°¡ ´Ù¸£´Ù. ¿¹·Î½á, ÆÄÀÏ ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù Á¦¾î¸¦ ¼öÇàÇÏ´Â checkXXX() ¸Þ½îµå Á¾·ù·Î´Â checkWrite(), checkRead(), ±×¸®°í checkDelete() µîÀÌ ÀÖ´Ù. ÀÌµé ¸Þ½îµåÀÇ ±â´ÉÀ» »ìÆìº¸¸é, checkWrite()´Â ³×Æ®¿öÅ©¸¦ ÅëÇØ Ŭ¶óÀÌ¾ðÆ®¿¡ Àü¼ÛµÈ ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ®³»ÀÇ ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛ¿¡ Á¢±ÙÇÏ¿© ÆÄÀÏ »ý¼º¿¡ ´ëÇÑ ½ÇÇàÀ» Á¦¾îÇϰíÀÚ ÇÒ ¶§ »ç¿ëµÇ¾îÁö¸ç, checkRead()´Â ÆÄÀÏ Àб⿡ ´ëÇÑ ½ÇÇàÀ» Á¦¾îÇϰí, checkDelete()´Â ÆÄÀÏ »èÁ¦¿¡ ´ëÇÑ ½ÇÇàÀ» Á¦¾îÇϰíÀÚ ÇÒ ¶§ ¼öÇàµÇ¾îÁø´Ù.

    ¾Õ¼­ ¼³¸íÇÑ checkXXX() ¸Þ½îµå¿Í SecurityManager Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿©Security Manager¸¦ ±¸ÇöÇÏ´Â ÀýÂ÷´Â ´ÙÀ½°ú °°´Ù. ¸ÕÀú, Security Ã¥ÀÓÀÚ´Â »õ·Î¿î Security Á¤Ã¥À» ¼ö¸³Çϰí, ¼ö¸³µÈ Security Á¤Ã¥ÀÇ ½ÇÇàÀ» ´ã´çÇÏ´Â SecurityManager Ŭ·¡½ºÀÇ ¼­ºêŬ·¡½º(Subclass)¸¦ »ý¼ºÇÑ´Ù. ±×¸®°í, ¼­ºêŬ·¡½º°¡ »ý¼ºµÈ ÈÄ¿¡ ¼ö¸³µÈ SecurityÁ¤Ã¥ ³»¿ëÀ» ¸¸Á·½Ã۱â À§ÇØ ±âÁ¸ checkXXX() ¸Þ½îµåµéÀÇ µ¿ÀÛ ³»¿ëµéÀ» ¼öÁ¤Çϰí, ¼öÁ¤µÈ checkXXX() ¸Þ½îµåµéÀ» ¼­ºêŬ·¡½º³»¿¡ Æ÷ÇÔ½ÃŲ´Ù. ¸¶Áö¸·À¸·Î, »õ·Î¿î Security Á¤Ã¥À» ¼öÇàÇÏ´Â ¼­ºêŬ·¡½º¸¦ Æ÷ÇÔÇϰí ÀÖ´Â SecurityManager Ŭ·¡½º¸¦ ¼³Ä¡Çϱâ À§Çؼ­ SystemŬ·¡½º³»ÀÇ setSecurityManager() ¸Þ½îµå¸¦ ÀÌ¿ëÇÏ¿© »õ·Î¿î Security Manger¸¦ JVM³»¿¡ ¼³Ä¡ÇÔÀ¸·Î½á, Security ManagerÀÇ ±¸ÇöÀÌ ¿Ï·áµÈ´Ù. ÀÌ¿Í °°ÀÌ Java¿¡¼­´Â Security Manager¸¦ ÅëÇØ ¸Å¿ì À¯¿¬Çϸ鼭µµ Åõ¸í¼ºÀÌ ÀÖ´Â Security¸¦ Á¦°øÇØÁÙ ¼ö ÀÖ´Ù.

    ÇÑÆí, Bytecode Verifier, Ŭ·¡½º ·Î´õ, ±×¸®°í Security Manger¸¦ ÅëÇÑ Security ó¸® °úÁ¤ÀÌ ³¡³ª¸é, JVMÀº ¿î¿µÃ¼Á¦¿ÍÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ½Ã½ºÅÛ³»ÀÇ Çϵå¿þ¾î ÀÚ¿øÀ» »ç¿ëÇϸ鼭 Àü¼Û¹ÞÀº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ëÀÎ ¾ÖÇø´À» µ¿ÀÛ ½ÃŲ´Ù.

    ¡¡

    1. Java ¾ð¾î°¡ Á¦°øÇÏ´Â Security ±â´É
    Java´Â C++¿Í À¯»çÇÑ °´Ã¼ ÁöÇâ ¾ð¾îÀÌÁö¸¸, ¾ð¾î ÀÚü³»¿¡¼­ÀÇ Security ±â´ÉÀ» Á¦°øÇϰí ÀÖ´Ù. Java ¾ð¾î°¡ °¡Áö´Â Áß¿äÇÑ Security Ư¡Àº º¯¼ö¿Í ¸Þ½îµå¿¡ ´ëÇÑ Á¢±Ù Á¦¾î, Ŭ·¡½º ŸÀÔ Á¤ÀÇ¿¡ ´ëÇÑ ¾ÈÀü¼º °ËÁõ, Æ÷ÀÎÅÍÀÇ ºÎÀç µîÀÌ ÀÖ´Ù.

    C++¿Í ¸¶Âù°¡Áö·Î Java´Â °´Ã¼µéÀÇ º¯¼ö¿Í ¸Þ½îµå¿¡ ´ëÇØ¼­ public, protected, privateÆÄ¶ó¹ÌÅ͸¦ ÅëÇØ Á¢±Ù Á¦¾î ´É·ÂÀ» °¡Áö°í ÀÖ´Ù. ÀÌ·¯ÇÑ Á¢±Ù Á¦¾î´Â ½Å·ÚÇÒ ¼ö ¾ø´Â Ŭ·¡½º°¡ ºÎÀûÀýÇÏ°Ô »ç¿ëµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» º¸ÀåÇØÁØ´Ù.

    ¶ÇÇÑ Á¢±Ù Á¦¾î¸¦ º¸ÀåÇÏ´Â ´Ù¸¥ ÆÄ¶ó¹ÌÅͷδ final·Î Ŭ·¡½º³ª ¸Þ½îµå¸¦ ¼±¾ðÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀº ¾ÇÀÇÀûÀÎ ÇÁ·Î±×·¡¸Ó°¡ ½Ã½ºÅÛÀÇ ÀÚ¿øÀ» À§ÇùÇϴ Ŭ·¡½º¸¦ ±âÁ¸ÀÇ ÀÚ¿ø °ü·Ã ÇÙ½ÉÀûÀÎ ¶óÀ̺귯¸® Ŭ·¡½ºÀÇ ¼­ºêŬ·¡½º·Î »ç¿ëÇϰųª ÇÑ Å¬·¡½ºÀÇ ¸Þ½îµå¸¦ ¿À¹ö¶óÀ̵ùÇÏ´Â °ÍÀ» ¸·¾ÆÁØ´Ù. ±×·¯¹Ç·Î, Java°¡ Á¦°øÇÏ´Â final ÆÄ¶ó¹ÌÅʹ Ŭ·¡½ºÀÇ Æ¯Á¤ÇÑ ºÎºÐÀÌ ¼öÁ¤µÇÁö ¾Ê¾ÒÀ½À» º¸ÀåÇØÁØ´Ù.

    ¶ÇÇÑ Java´Â ±âÁ¸ C++¿¡¼­ Á¦°øÇÏ´Â Æ÷ÀÎÅÍ ±â´ÉÀ» Á¦°ÅÇÏ¿´´Ù. ÀÌ´Â ½ÇÇà °¡´ÉÇÑ ÀÀ¿ëÀÎ ¾ÖÇø´ÀÌ ³×Æ®¿öÅ©À» ÅëÇØ ¿ø°ÝÁö¿¡ ÀÖ´Â ÄÄÇ»ÅÍ ½Ã½ºÅÛ¿¡¼­ ¼öÇàµÉ °æ¿ì ¸Þ¸ð¸®³»¿¡ Á¸ÀçÇϰí ÀÖ´Â ±âÁ¸ÀÇ ´Ù¸¥ ½ÇÇà ÇÁ·Î±×·¥µéÀÇ Á¢±ÙÀ» ¸·±â À§Çؼ­´Ù.

    ÀÌ¿Í °°ÀÌ Java´Â Sandbox ±â¼ú»Ó¸¸ ¾Æ´Ï¶ó Java ¾ð¾î ÀÚü¿¡ ´ëÇÑ Security¸¦ Á¦°øÇÏ¿© ¾ÈÀü¼ºÀ» ÇÑÃþ ´õ °­È­½ÃÄ×´Ù.

    ¡¡

    IV È®ÀåµÈ Java Security ±â´É

    º» Àå¿¡¼­´Â JDK1.1¿¡¼­ºÎÅÍ Á¦°øÇϱ⠽ÃÀÛÇÑ ÀüÀÚ ¼­¸í ¹× X.509±â¹ÝÀÇ ÀÎÁõ¼­ µî JDK1.0¿¡¼­ È®ÀåµÈ ¿©·¯ Security ±â¼ú¿¡ ´ëÇØ ±â¼úÇÑ´Ù.

    ¡¡

    1. Java Security API

    JDK1.0¿¡¼­ÀÇ Security ±â¼ú ¿Ü¿¡ JDK1.1ºÎÅÍ´Â ÀüÀÚ ¼­¸í, ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®, X.509±â¹ÝÀÇ ÀÎÁõ¼­ °ü¸®, Ű °ü¸®, ±×¸®°í Á¢±Ù Á¦ÇÑ ±ÇÇÑÀ» Á¦°øÇÏ´Â Security API¸¦ Á¦°øÇÑ´Ù[10].

    ¸ÕÀú ÀüÀÚ ¼­¸í¿¡ ´ëÇØ »ìÆì º¸¸é, ÀüÀÚ ¼­¸íÀº ¾ÖÇø´ ¹× ¾îÇø®ÄÉÀ̼ÇÀ» ½Å·ÚÇϴµ¥ »ç¿ëµÇ¾îÁø´Ù.

    ÀüÀÚ ¼­¸íÀ» ±¸ÇöÇϱâ À§Çؼ­´Â °ø°³Å° ¾Ïȣȭ ¹æ½ÄÀ» ÀÌ¿ëÇϴµ¥, °ø°³Å° ¾Ïȣȭ ¹æ½ÄÀº ¾Ïȣȭ Ű¿Í º¹È£È­ ۰¡ µ¿ÀÏÇÏ¿© ±³È¯µÇ´Â Á¤º¸¿¡ ´ëÇÑ ÀÎÁõÀ» Á¦°øÇÏÁö ¸øÇÏ´Â ´ëĪÇü ¾Ïȣȭ ±â¼ú°ú ´Þ¸® ¾Ïȣȭ¿¡ »ç¿ëµÇ´Â Ű¿Í º¹È£È­¿¡ »ç¿ëµÇ´Â ۰¡ ¼­·Î ´Ù¸£´Ù. ÀϹÝÀûÀ¸·Î º¹È£È­ Ű´Â °ø°³¸¦ Çϱ⠶§¹®¿¡ °ø°³Å°·Î Á¤ÀǵǾîÁö¸ç, ¾ÏȣȭÇϴµ¥ »ç¿ëµÇ´Â Ű´Â ºñ¹Ð·Î °£Á÷Çϱ⠶§¹®¿¡ °³ÀÎŰ·Î Á¤ÀǵǾîÁø´Ù. °ø°³Å° ¾Ïȣȭ ¹æ½ÄÀº ¾Ïȣȭ ¾Ë°í¸®µë Ư¼º»ó °³ÀÎŰ·Î ¾ÏȣȭµÈ Á¤º¸´Â °³ÀÎŰ¿¡ ´ëÀÀµÇ´Â °ø°³Å°¸¦ ¹Ýµå½Ã »ç¿ëÇÏ¿© º¹È£È­ÇÒ ¼ö ÀÖ´Ù[11]. °ø°³Å° ¾Ïȣȭ ¹æ½ÄÀÇ ÀýÂ÷´Â ±×¸² 5¿Í °°´Ù.

    ±×¸² 5 °ø°³Å° ¾Ïȣȭ ÀýÂ÷

    ±×¸²5¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ ¼Û½ÅÀÚ A´Â °³ÀÎŰ KRa¸¦ °¡Áö°í Æò¹® M¿¡ ´ëÇÑ ¾ÏÈ£¹®À» ±¸¼ºÇϰí, ¼ö½ÅÀÚ B´Â AÀÇ °³ÀÎŰ·Î ¾ÏȣȭµÈ M`À» ¹Þ°í ¾ÏȣȭµÈ M`À» º¹È£È­Çϱâ À§Çؼ­ AÀÇ °ø°³Å° KUa¸¦ ÀÌ¿ëÇÑ´Ù. ±×¸²5¿Í °°Àº °ø°³Å° ¾Ïȣȭ ÀýÂ÷°úÁ¤Àº °á°úÀûÀ¸·Î´Â ¼Û½ÅÀÚ A°¡ ¾ÏȣȭÇϱâ À§ÇÑ Æò¹® M¿¡ ÀÚ½ÅÀÇ °³ÀÎ۸¦ »ç¿ëÇÏ¿© ÀüÀÚ ¼­¸íÇÑ È¿°úÀÌ´Ù. ÀÌ¿Í °°Àº °ø°³Å° ¾ÏȣȭÀÇ Æ¯¼º¶§¹®¿¡ Á¤º¸ ÀÎÁõÀ» À§Çؼ­´Â °ø°³Å° ¾Ïȣȭ ¹æ½ÄÀ» ±Ù°£À¸·Î ÇÏ´Â ÀüÀÚ ¼­¸íÀ» »ç¿ëÇÑ´Ù.

    ´ëÇ¥ÀûÀÎ °ø°³Å° ¾Ïȣȭ ¾Ë°í¸®µëÀ¸·Î´Â DSA(Digital Signature Algorithm)¿Í RSA(RSA ¾Ë°í¸®µëÀ» ¸¸µç Ronald Rivest, Adir Shamir, Leonard Adleman¿¡ ÀÇÇØ ¸í¸íµÇ¾îÁü)°¡ ÀÖ´Ù. JDK1.1¿¡¼­´Â DSA¸¸À» »ç¿ëÇϰí ÀÖÀ¸¸ç, ÀÌ´Â RSA»ç°¡ ÇöÀç ¹Ì±¹°ú ij³ª´Ù¿¡¼­ RSA ¾Ïȣȭ ¾Ë°í¸®µë¿¡ ´ëÇØ ƯÇ㸦 ¼ÒÁöÇϰí Àֱ⠶§¹®ÀÌ´Ù. ±×·¯³ª, Á¦3ÀÇ ¾÷ü·ÎºÎÅÍ RSA¸¦ Á¦°øÇÏ´Â Java Security API¸¦ »ç¿ëÇϸé, RSA ¾Ïȣȭ ¾Ë°í¸®µëÀ» Java¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    ÇÑÆí, ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®´Â ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÇ¾î¿Â ¾ÖÇø´ÀÇ ³»¿ëÀÌ º¯ÇÏÁö ¾Ê¾ÒÀ½À» Áõ¸íÇϴµ¥ »ç¿ëµÇ¾îÁø´Ù. ÀÌ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ® ¾Ë°í¸®µëÀº Á¤º¸ ³»¿ëÀÇ Ã¼Å©¼¶(CheckSum)À» ±¸ÇϵíÀÌ Á¤º¸¸¦ ÇØ½¬(hash) ó¸®ÇÑ ÈÄ °¢ Á¤º¸¿¡ ´ëÀÀµÇ´Â ÀÏÁ¤ ±æÀÌÀÇ ÇØ½¬¸¦ ±¸ÇÏ´Â ¾Ë°í¸®µëÀÌ´Ù. ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®´Â ÇØ´ç Á¤º¸¿Í ÀÏ´ëÀÏ·Î ¸ÅÇεDZ⠶§¹®¿¡ Á¤º¸ÀÇ ³»¿ëÀ» Áõ¸íÇÒ ¼ö ÀÖ´Â ÄÚµå·Î¼­ Ȱ¿ëµÈ´Ù. Áï ¾î¶² Á¤º¸¸¦ ÇØ½¬ÇÔ¼ö¸¦ ÅëÇØ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸Çϸé ÇØ´ç ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ÀÌ¿ëÇØ ÀÚ·áÀÇ ¼öÁ¤, ¼ø¼­ º¯°æ, »èÁ¦, ÷°¡ µî Á¤º¸ÀÇ ÅëÇÕ¼ºÀ» üũÇÒ ¼ö ÀÖ´Ù.

    ƯÈ÷ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÏ´Â ÇØ½¬ÇÔ¼ö´Â ´Ü¹æÇâ ÇØ½¬ÇÔ¼ö·Î¼­ »ý¼ºµÈ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®·ÎºÎÅÍ ¿ø·¡ÀÇ Á¤º¸¸¦ Ãß·ÐÇÒ ¼ö ¾ø´Â ÇØ½¬¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ¾ÈÀüÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇØ½¬ÇÔ¼ö´Â ÀÓÀÇÀÇ ±æÀ̸¦ °¡Áö°í ÀÖ´Â Á¤º¸¸¦ ÀÔ·Â ¹Þ¾Æ ÀÏÁ¤ÇÑ ±æÀÌÀÇ °á°ú·Î ÀüÇØÁÖ´Â ÇÔ¼öÀÌ´Ù. ¿ø·¡ÀÇ Á¤º¸ X¿¡ ´ëÇÏ¿© ÇØ½¬ÇÔ¼ö f¸¦ »ç¿ëÇÏ¿© ³ª¿Â °á°ú°¡ x'ÀÎ °æ¿ì¿¡ ½ÄÀ¸·Î ³ªÅ¸³»¸é f(X) = x' À̸ç, ¾ÈÀüÇÑ ÇØ½¬ ÇÔ¼ö°¡ µÇ±â À§Çؼ­´Â ´ÙÀ½ÀÇ Á¶°ÇÀ» ¸¸Á·ÇØ¾ß ÇÑ´Ù.

    Á¶°Ç 1: ÀÓÀÇÀÇ ±æÀÌÀÇ Á¤º¸¸¦ ÀÔ·ÂÀ¸·Î ¹ÞÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

    Á¶°Ç 2: °íÁ¤µÈ ±æÀÌÀÇ Ãâ·ÂÀ» ¸¸µé¾î¾ß ÇÑ´Ù.

    Á¶°Ç 3: ¸ðµç X¿¡ ´ëÇØ¼­, f(X)ÀÇ °è»êÀÌ ½¬¿ö¾ß ÇÑ´Ù.

    Á¶°Ç 4: ÁÖ¾îÁø x'¿¡ ´ëÇØ¼­ ¿ø·¡ÀÇ X¸¦ ±¸ÇÒ ¼ö ¾ø¾î¾ß ÇÑ´Ù.

    Á¶°Ç 5: X,Y°¡ °°Áö ¾ÊÀ» ¶§, f(X), f(Y)´Â °°À» ¼ö ¾ø´Ù.

    Á¶°Ç 6: f(X)=f(Y)ÀÎ X,Y¸¦ ±¸ÇϱⰡ ¾î·Á¿ö¾ß ÇÑ´Ù.

    ¡¡

    ÀÌ·¯ÇÑ ¾Ïȣȭ ÇØ½¬ ÇÔ¼öÀÇ Á¾·ù´Â 128 bitÀÇ Ãâ·ÂÀ» »ý¼ºÇÏ´Â MD5¿Í 160 bitÃâ·ÂÀÇ SHA(Secure Hash Algorithm)°¡ ÀÖ´Ù. JDK1.1¿¡¼­´Â MD5¿Í SHA¸¦ Áö¿øÇÏ´Â API¸¦ Á¦°øÇϰí ÀÖ´Ù. ±×¸²6Àº ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®ÀÇ »ý¼º °úÁ¤À» º¸¿©ÁØ´Ù.

    ¡¡
    ±×¸²6 ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®ÀÇ »ý¼º °úÁ¤

    ÇÑÆí, JDK1.1¿¡¼­´Â X.509v1±â¹ÝÀÇ ÀÎÁõ¼­¸¦ Áö¿øÇÑ´Ù. X.509 ±â¹ÝÀÇ ÀÎÁõ¼­´Â ¾ÖÇø´ ȤÀº ¾îÇø®ÄÉÀ̼ǿ¡ °ø°³Å° ¾Ïȣȭ ¾Ë°í¸®µëÀ» ÀÌ¿ëÇÏ¿© ÀüÀÚ ¼­¸íÀ» ÇÒ °æ¿ì »ç¿ëµÇ¸ç °ø°³Å°ÀÇ ½Å·Ú¼ºÀ» Áõ¸íÇÏ´Â ÀÎÁõ¼­·Î »ç¿ëµÈ´Ù. ¶ÇÇÑ, JDK1.1¿¡¼­ Á¦°øÇϴ Ű °ü¸® ºÎºÐÀº ÀüÀÚ ¼­¸í ¹× ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ »ç¿ëÇϴµ¥ ÇÊ¿äÇÑ °³ÀÎŰ ¹× °ø°³Å°ÀÇ °ü¸®¸¦ Áö¿øÇϱâ À§ÇÑ °ÍÀ̸ç Á¢±Ù Á¦ÇÑ ºÎºÐÀº ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ÀÚ¿ø¿¡ Á¢±ÙÀ» Á¦ÇÑÇϴµ¥ »ç¿ëµÇ¾îÁø´Ù.

    À̿ܿ¡µµ Security¿Í °ü·ÃµÇ¾î JDK1.1¿¡¼­ Á¦°øÇÏ´Â API¿Ü¿¡ ´Ù¸¥ ¾÷ü¿¡¼­ Á¦°øÇÏ´Â SSP(Security Package Provider)¿¡ Æ÷ÇԵǾî ÀÖ´Â API¸¦ »ç¿ëÇÏ¿© Security ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

    ¡¡

    1. JAR ÆÄÀϰú ÀüÀÚ ¼­¸í
    À¥¿¡¼­ »ç¿ëµÇ¾îÁö´Â HTTP ÇÁ·ÎÅäÄÝÀº Á¤º¸¸¦ Àü¼ÛÇϴµ¥ ÀÖ¾î ÆÄÀÏ Çϳª¸¦ º¸³¾ ¶§ ¸¶´Ù ¼Û¼ö½ÅÀÚ°£ÀÇ »õ·Î¿î ¿¬°áÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ ¹æ½ÄÀº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ëÀÎ ¾ÖÇø´ÀÌ Å¬¶óÀ̾ðÆ®ÀÇ À¥ ºê¶ó¿ìÀú¿¡¼­ ¼öÇàµÇ±â À§Çؼ­ ÀϹÝÀûÀ¸·Î ¸¹Àº ¼Ò¸® ÆÄÀÏ ¹× ±×¸² ÆÄÀÏÀ» Æ÷ÇÔÇϰí Àֱ⠶§¹®¿¡ ¾ÖÇø´À» ±¸¼ºÇϰí ÀÖ´Â °¢°¢ÀÇ ÆÄÀϵéÀ» Àü¼ÛÇϴµ¥ ¸¹Àº ½Ã°£ÀÌ ¿ä±¸µÇ¾î HTTP¸¦ ÅëÇÑ Àü¼Û È¿À²ÀÌ ±Þ°ÝÈ÷ ¶³¾îÁö°Ô µÈ´Ù. ÀÌ¿¡ Java¿¡¼­´Â JDK1.1ºÎÅÍ ZIP±â¹ÝÀÇ ¾ÐÃà ¹× º¹¿øÀ» Áö¿øÇÏ´Â JAR ÆÄÀÏ ¹æ½ÄÀ» Á¦°øÇÑ´Ù [12][13].

    JAR¹æ½ÄÀº ¿©·¯ °³ÀÇ ÆÄÀÏ·Î µÇ¾î ÀÖ´Â ¾ÖÇø´À» ÇϳªÀÇ ÅëÇÕµÈ ÆÄÀÏ·Î, Çѹø¿¡ HTTP ÇÁ·ÎÅäÄÝÀ» ÅëÇØ Àü¼ÛÇϱ⠶§¹®¿¡ HTTP ÇÁ·ÎÅäÄÝÀÇ Àü¼Û È¿À²À» °³¼±½Ãų ¼ö ÀÖ´Ù.

    ÀÌ·¯ÇÑ JAR ÆÄÀÏ ¹æ½ÄÀÇ Æ¯¼ºÀº ¾ÖÇø´¿¡ ÇÊ¿äÇÑ ÆÄÀϵéÀ» ÇÔ²² ¹­¾î Àü¼ÛÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾ÖÇø´À» ±¸¼ºÇϰí ÀÖ´Â °¢°¢ÀÇ ÆÄÀÏ¿¡ ´ëÇÑ ÀüÀÚ ¼­¸íÀ» ÇÒ ÇÊ¿ä¾øÀÌ ¾ÖÇø´À» ±¸¼ºÇϰí ÀÖ´Â Àüü ÆÄÀÏÀÎ JARÆÄÀÏ¿¡ ´ëÇÑ ÀüÀÚ ¼­¸íÀ» ÅëÇØ ¾ÖÇø´ÀÇ Àüü ³»¿ëÀ» ÀÎÁõÇÒ ¼ö ÀÖ´Ù. ÀüÀÚ ¼­¸íÀº ÆÄÀÏÀÇ ¾ÐÃà ¹× º¹¿øÀ» ´ã´çÇÏ´ÂJAR Åø°ú ÀüÀÚ ¼­¸í¿¡ ÇÊ¿äÇÑ Å° »ý¼ºÀ» ´ã´çÇÏ´Â Javakey¸¦ ÀÌ¿ëÇÑ´Ù. ±×¸®°í, JDK1.1¿¡¼­´Â ÀüÀÚ ¼­¸íÀ» À§ÇØ DSA¿Í MD5, ±×¸®°í SHA ¾Ïȣȭ ¾Ë°í¸®µë°ú X.509v1±â¹ÝÀÇ ÀÎÁõ¼­¸¦ »ç¿ëÇÑ´Ù.

    ¿©·¯ °³ÀÇ ÆÄÀÏ µé·Î ±¸¼ºµÇ¾î ÀÖ´Â ¾ÖÇø´Àº JAR Åø°ú Javakey¸¦ ÀÌ¿ëÇÏ¿© ÇϳªÀÇ JARÆÄÀÏ·Î ¹­¿©Áö¸ç, JARÆÄÀϳ»¿¡´Â ¿ø·¡ÀÇ ÆÄÀϰú ÀüÀÚ ¼­¸íÀ» ÅëÇØ »ý¼ºµÈ Manifest ÆÄÀÏ ¹×Signature ÆÄÀÏ, ±×¸®°í ÀüÀÚ ¼­¸íÀÇ ³»¿ëÀÌ ´ã°ÜÁ® ÀÖ´Â DSAÆÄÀÏÀÌ »ý¼ºµÈ´Ù. ManifestÆÄÀÏÀÇ È®ÀåÀÚ´Â .MFÀ̸ç, Signature ÆÄÀÏÀÇ È®ÀåÀÚ´Â .SFÀ̰í, ¸¶Áö¸·À¸·Î DSAÆÄÀÏÀÇ È®ÀåÀÚ´Â .DSA°¡ µÈ´Ù. ±×¸²7Àº ¾ÖÇø´ÀÇ ÀüÀÚ ¼­¸í °úÁ¤À» º¸¿© ÁØ´Ù.

    ±×¸²7¿¡¼­ÀÇ µ¿ÀÛ °úÁ¤À» »ìÆìº¸¸é ¼Û½ÅÀÚ´Â JAR ÅøÀ» ÀÌ¿ëÇÏ¿© ¿©·¯ °³ÀÇ ÆÄÀÏ·Î ±¸¼ºµÈ ÆÄÀÏÀ» Çϳª·Î ¹­¾î JARÆÄÀÏÀ» »ý¼ºÇÏ°í »ý¼ºµÈ JARÆÄÀÏÀÇ ÀüÀÚ ¼­¸íÀ» ÃʱâÈ­ ÇÑ´Ù. ÃʱâÈ­ ÇÏ´Â °úÁ¤Àº JAR ÆÄÀϳ»¿¡ Æ÷ÇԵǾî ÀÖ´Â °¢ Ŭ·¡½º¸¶´Ù º°µµ·Î ¼öÇàµÇ´Âµ¥ ¸ÕÀú Ŭ·¡½ºÀÇ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÏ¿© .MFÈ®ÀåÀÚ¸¦ °¡Áö´Â ÆÄÀÏÀ» »ý¼ºÇÏ¿© ÀúÀåÇϰí, .MFÆÄÀÏÀÇ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÏ¿© .SFÈ®ÀåÀÚ¸¦ °¡Áö´Â ÆÄÀÏÀ» »ý¼ºÇÏ¿© ÀúÀåÇÑ´Ù. ÀÌ¿Í °°ÀÌ ¼öÇàÇÏ´Â ÀÌÀ¯´Â .MFÆÄÀÏÀÇ ¹«°á¼ºÀ» º¸ÀåÇϱâ À§Çؼ­ ÀÌ´Ù. ±×¸®°í »ý¼ºµÈ .MFÆÄÀÏÀº X.509v1 ÀÎÁõ¼­¿Í »ý¼ºµÈ °ø°³Å° ¹× ºñ¹Ð۸¦ ÀÌ¿ëÇÏ¿© ÀüÀÚ ¼­¸íµÈ ÈÄ¿¡ .DSAÈ®ÀåÀÚ¸¦ °¡Áö´Â ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.

    ±×¸²7 ¾ÖÇø´ÀÇ ÀüÀÚ ¼­¸í ÀýÂ÷ °úÁ¤

    ¼Û½ÅÀÚ´Â »ý¼ºµÈ .MFÆÄÀÏ ¹× .DSAÆÄÀÏ, ±×¸®°í .SFÆÄÀÏÀ» ´Ù½Ã ¹­¾î ÀüÀÚ ¼­¸íÈ­µÈ »õ·Î¿î JARÆÄÀÏÀ» »ý¼ºÇÏ¿© ¼ö½ÅÀÚ¿¡°Ô Àü¼ÛÇÑ´Ù. ¼ö½ÅÀÚ´Â ÀüÀÚ ¼­¸íÈ­µÈ ÆÄÀÏÀ» ¼ö½Å ¹ÞÀº µÚ ¼¼ °³ÀÇ .MFÆÄÀÏ ¹× .DSAÆÄÀÏ, ±×¸®°í .SFÆÄÀÏÀ» ÃßÃâÇÑ ÈÄ, .MFÆÄÀÏÀÇ ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®¸¦ ±¸ÇÏ¿© .SFÆÄÀϰú ºñ±³ÇÏ¿© ÀÏÄ¡Çϸé .DSAÆÄÀÏÀ» º¹È£È­ÇÑ´Ù.

    .DSAÆÄÀÏÀÌ º¹È£È­µÇ¸é .MFÆÄÀϰúÀÇ ³»¿ë°ú ºñ±³ÇÏ¿© °á°ú°¡ ÀÏÄ¡Çϸé, JARÆÄÀÏÀ» º¹¿øÇÏ¿© JARÆÄÀϳ»¿¡ Æ÷ÇԵǾî Àִ Ŭ·¡½º ÆÄÀϵéÀ» ½ÇÇà½ÃŲ´Ù. ÀÌ·¯ÇÑ °úÁ¤À» ÅëÇØ ½Å·Ú¼ºÀ» º¸ÀåÇÏ´Â ÀüÀÚ ¼­¸íÈ­µÈ ¾ÖÇø´À» ½ÇÇà½Ãų ¼ö ÀÖ´Ù.

    ÇÑÆí, ÀüÀÚ ¼­¸í°ú JAR ÆÄÀÏÀº Java ¾îÇø®ÄÉÀ̼ǿ¡µµ ÀÌ¿ëµÇ¾î Áú ¼ö ÀÖ´Ù. ¹°·Ð Java ¾îÇø®ÄÉÀ̼ÇÀº ´ëºÎºÐÀÇ ½Ã½ºÅÛ ÀÚ¿ø Á¢±Ù¿¡ ´ëÇÑ Á¦ÇÑÀÌ ¾ø±â ¶§¹®¿¡ ¾ÖÇø´ÀÇ ÀüÀÚ ¼­¸í È¿°ú¿Í Á¶±Ý ´Þ¶óÁú ¼ö ÀÖÀ¸³ª, ÀüÀÚ ¼­¸íÀ» ÅëÇØ ÄÄÇ»ÅÍ ½Ã½ºÅÛ³»¿¡ ¹ÙÀÌ·¯½º¸¦ °¨¿°½ÃŲ »ç¿ëÀÚ¿¡ ´ëÇØ Java ¾îÇø®ÄÉÀÌ¼Ç ¹èÆ÷ À¯¹«ÀÇ Ã¥ÀÓÀ» ÆÇº°ÇÒ ¼ö ÀÖ´Â È¿°ú¸¦ °¡Á®¿Â´Ù.

    ¡¡

    V. ÇâÈÄ Java Security ±â¼ú

    JDK1.2 ¹× ÇâÈÄ Java¿¡¼­ Á¦°øÇÏ°Ô µÉ Security ±¸Á¶´Â Protected Domain¿¡ ´ëÇÑ Security, Ʋ ±â¹ÝÀÇ Security ȯ°æ ¼³Á¤, À¯¿¬ÇÑ Á¢±Ù Á¦ÇÑ, X.509v3±â¹ÝÀÇ ÀÎÁõ¼­, ´Ù¾çÇÑ ¾Ïȣȭ ¾Ë°í¸®µëÀÇ ¼ö¿ë, ¾ÈÀüÇÑ Åë½ÅÀ» À§ÇÑ SSL(Secure Socket Layer) ¹× SKIP(Simple Key Management Internet Protocol) Áö¿ø, Çâ»óµÈ °¨½Ã ´É·Â, ±×¸®°í Domain IDs µîÀ» Áö¿øÇÒ ¿¹Á¤ÀÌ´Ù. ´ÙÀ½¿¡ ÀÌµé °¢ ±â¼ú¿¡ ´ëÇØ »ìÆìº»´Ù.

    ¡¡

    1. Protected Domains
    2. Protected Domains´Â ½ÇÇà °¡´ÉÇÑ ÀÀ¿ëÀÎ ¾ÖÇø´ ȤÀº ¾îÇø®ÄÉÀ̼ÇÀÇ Æ¯Â¡¿¡ µû¶ó ½Ã½ºÅÛ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ºÎºÐÀ» ºÐ¸®½ÃÄÑ ÇÑ ½Ã½ºÅÛ ¿µ¿ª³»¿¡ °¡»óÀûÀÎ Protected DomainsÀ» ¿©·¯ °³·Î µÎ´Â ±â¼úÀÌ´Ù. ¿¹¸¦ µé¾î ÀüÀÚ ¼­¸íÀ» ÀÌ¿ëÇÏ¿© ½Å·Ú¼ºÀ» Á¦°øÇÏ´Â ¾ÖÇø´ ȤÀº ¾îÇø®ÄÉÀ̼ÇÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛ ÀÚ¿ø ºÎºÐ°ú ±×·¸Áö ¾ÊÀº °æ¿ì¿¡ ´ëÇÑ ºÎºÐÀ» Protected Domain ±â¼úÀ» ÀÌ¿ëÇÏ¿© Â÷º°È­ ½Ãų ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ±â¼úÀº ±âÁ¸ÀÇ ¹æ½Ä¿¡¼­ Á¦°øÇÏ´Â Sandbox ±â¼úÀÇ ±â´É Áß Fine-grained Control·Î ¸í¸íµÇ¾îÁö´Â ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù Á¦ÇÑ ±â¼úÀ» È®ÀåÇÏ¿© ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Æ¯¼º¿¡ µû¶ó ´ÙÁß Security Á¤Ã¥À» ¼¼¿ï ¼ö ÀÖÀ½À¸·Î½á À¯¿¬¼º ¹× ¾ÈÁ¤¼ºÀ» °­È­½ÃÄ×´Ù.

      Java¿¡¼­ Á¤Àǵǰí ÀÖ´Â Protection DomainÀº ½Ã½ºÅÛ ÀÚ¿ø ºÎºÐ°ú ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î ³ª´©¾îÁø´Ù. ½Ã½ºÅÛ ÀÚ¿ø ºÎºÐÀ¸·Î´Â ÆÄÀÏ ½Ã½ºÅÛ, ³×Æ®¿öÅ©, ¸ð´ÏÅÍ, Űº¸µå µîÀ̸ç, ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î´Â Java ¾ÖÇø´ ¹× ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÖ´Ù. Protected Domains ±¸Á¶´Â ±×¸² 8°ú °°´Ù.

      ±×¸² 8¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ Protected Domain ±¸Á¶´Â ÇÑ System Domain ¿µ¿ª³»¿¡ ´ÙÁß Protected DomainÀ» µÎ¾î ÇØ´çµÇ´Â Protected Domain¿¡ Domain ID(±×¸²8 ¿¹: A, B)¸¦ ºÎ¿©ÇÏ¿© ±¸ºÐÇϸç ÀÌ·¯ÇÑ ¹æ½ÄÀ» ÅëÇØ ±âÁ¸ÀÇ Java¿¡¼­ »ç¿ëµÇ´Â ´ÜÀÏ System Domain ±â¼ú¿¡¼­ ¹ß»ýµÇ¾î¿Â ¹®Á¦Á¡ÀÎ ÇϳªÀÇ ¿¡·¯°¡ ÀüüÀûÀÎ ½Ã½ºÅÛ ÀÚ¿ø °ü¸® ºÎºÐ¿¡ Ä¡¸íÀûÀÎ À§ÇùÀÌ µÇ´Â °ÍÀ» ÇØ°áÇÒ ¼ö ÀÖ´Ù.

      ±×¸² 8 Protected Domains ±¸Á¶
    3. ±âŸ Security ±â´Éµé
    Protected Domain ±â¼ú ¿Ü¿¡ ¾ÕÀ¸·Î JDK1.2 ÀÌÈÄ ¹öÀü¿¡¼­ Á¦°øÇÏ°Ô µÉ Security ±â¼úµéÀº ´ÙÀ½°ú °°´Ù.

    ÀÌÀü¿¡ Java¿¡¼­ Á¦°øÇÏ´Â Security Á¤Ã¥Àº ÇÁ·Î±×·¡¹Ö ¼öÁØ¿¡¼­ Á¦°øÇÏ¿© ÀÏ¹Ý »ç¿ëÀÚµéÀÌ ÀÌ¿ëÇϱ⿡´Â ¸Å¿ì ¾î·Á¿üÀ¸³ª, ÇâÈÄ ³ª¿À°Ô µÉ JDK1.2 ÀÌÈÄ ¹öÀü¿¡¼­´Â °£´ÜÇϸ鼭 »ç¿ëÇϱ⠽¬¿î ÅøÀ» Á¦°øÇÒ °èȹÀÌ´Ù.

    ÇÑÆí, ¼Û½ÅÀÚ¿Í ¼ö½ÅÀÚ°£¿¡ Åë½Å»ó¿¡¼­ ¹ß»ýµÇ´Â ÁÖ¿äÇÑ Á¤º¸ÀÇ À¯ÃâÀ» ¹æÁöÇϱâ À§ÇÑ ¾Ïȣȭ ±â¼úÀÇ »óÈ£ Á¶Á¤À» °¡´ÉÄÉ ÇÏ´Â SKIPÀ» Á¦°øÇÏ¿© SSL°ú ´õºÒ¾î Åë½Å»ó¿¡¼­ ¹ß»ýµÇ´Â À§Çù ¿ä¼Òµé¿¡ ´ëÇÑ Security¸¦ °­È­ ½Ãų ¿¹Á¤ÀÌ´Ù [14].

    °¨½Ã ±â´É¿¡¼­´Â ºÒ¹ýÀûÀ¸·Î ħÀÔÇÑ ³×Æ®¿öÅ© »ç¿ëÀÚ¿¡ ´ëÇÑ °¨½Ã ±â´ÉÀ» À§ÇØ »ç¿ëÀÚ ±â·Ï(log)À» ÀúÀåÇÏ°í °Ë»öÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇϸç X.509v3 ±â¹ÝÀÇ ÀÎÁõ¼­ ¹× ¿Â¶óÀÎ ÀÎÁõ ¼­¹ö(Certificate Authority)¸¦ ±¸ÇöÇϴµ¥ ÇÊ¿äÇÑ APIµéµµ Á¦°øÇÒ ¿¹Á¤ÀÌ´Ù.

    ¡¡

    VI. °á·Ð

    Java´Â °£°áÇÏ°í °´Ã¼ÁöÇâÀûÀ̸ç Ç÷§Æû¿¡ µ¶¸³ÀûÀ¸·Î ½ÇÇà °¡´ÉÇÑ ÇÁ·Î±×·¥¹Ö ¾ð¾îÀÌ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡ Áß °¡Àå Áß¿äÇÑ °ÍÀº ³×Æ®¿öÅ©¸¦ ÅëÇØ Java·Î ±¸ÇöµÈ ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÇÁ·Î±×·¥µéÀÌ ¿î¿µÃ¼Á¦ Ç÷§Æû¿¡ °ü°è¾øÀÌ »ç¿ëÀÚÀÇ ÄÄÇ»ÅÍ¿¡¼­ µ¿ÀûÀ¸·Î Àü¼ÛµÇ¾î ¼öÇàµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Java ±â¼úÀº ³×Æ®¿öÅ©À» ±â¹ÝÀ¸·Î ÇÏ´Â ÄÄÇ»ÆÃ ½Ã½ºÅÛÀÇ ´É·ÂÀ» Áõ´ë½Ã۸ç, ¶ÇÇÑ ³×Æ®¿öÅ© ¹× ºÐ»ê ÄÄÇ»ÆÃ ȯ°æ¿¡¼­ ¹ß»ýµÇ´Â ÀÀ¿ë ÇÁ·Î±×·¥µéÀÇ º¸¼ö ¹× À¯Áö ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥À» Á¦½ÃÇÒ ¼ö ÀÖ´Ù.

    ±×·¯³ª ³×Æ®¿öÅ© ¹× ºÐ»ê ÄÄÇ»ÆÃ ȯ°æ¿¡¼­´Â ¼­¹ö¿¡¼­ Àü¼ÛµÇ¾î ¿Â Java ¾ÖÇø´°ú °°Àº ½ÇÇà °¡´ÉÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Å¬¶óÀÌ¾ðÆ®¿¡¼­ ½ÇÇàµÇ¾î ½Ã½ºÅÛ ÀÚ¿øµéÀ» ÆÄ±«ÇÒ ¼ö ÀÖ´Â »õ·Î¿î Security ¹®Á¦¸¦ ¹ß»ý½ÃŲ´Ù. ÇöÀç Java Security¿¡¼­´Â JDK1.0¿¡¼­ÀÇ Sandbox ±â¼ú, JDK1.1¿¡¼­ÀÇ ÀüÀÚ ¼­¸íÀ» »ç¿ëÇÑ ¾ÖÇø´ ÀÎÁõ ±â¼ú, ±×¸®°í JDK1.2¿¡¼­ Á¦°øÇÒ ¿¹Á¤ÀÎ Á¢±Ù Á¦ÇÑ ±â¼úµî°ú °°Àº ´Ù¾çÇÑ Security ±â¼úÀ» Á¦°øÇÏ¿© Security¸¦ ÇÑÃþ ´õ °­È­ ½Ã۸ç, »ç¿ëÀÚ¿¡°Ô´Â º¸´Ù ³ªÀº À¯¿¬¼ºÀ» Áö¿øÇÑ´Ù.

    µû¶ó¼­, Java¸¦ ³×Æ®¿öÅ© ÄÄÇ»ÆÃ ȯ°æ¿¡ Àû¿ëÇÏ·Á´Â ±â¾÷À̳ª ±â°ü, ȤÀº °³ÀÎ »ç¿ëÀÚ´Â Java¿¡¼­ Á¦°øÇÏ´Â ´Ù¾çÇÑ Security±â¼úÀ» È¿°úÀûÀ¸·Î ÀÌ¿ëÇÔÀ¸·Î½á, ³×Æ®¿öÅ© ¹× ºÐ»ê ÄÄÇ»ÆÃ ȯ°æ¿¡¼­ÀÇ Security ¹®Á¦¸¦ º¸´Ù È¿À²ÀûÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

    DSA Digital Signature Algorithm

    JVM Java Virtual Machine

    OLE Object Linking and Embedding

    SHA Secure Hash Algorithm

    SKIP Simple Key Management Internet Protocol

    SSL Secure Socket Layer

    SSP Security Package Provider

    WWW World Wide Web

    ¡¡

    ¡¡
    1. J.Steven Fritzinger, and Marianne Mueller, 'Java Security,' Sun Microsystems, Inc. 1997.
    2. Available via http://java.sun.com/security

    3. Joseph A. Bank, 'Java Security,' 1995.
    4. Available via http://www-swiss.ai.mit.edu/~jbank/javapaper/javapaper.html

    5. Sun Microsystems, 'Frequently Asked Questions - Java Security,' 1997.
    6. Available via http://java.sun.com/sfaq

    7. Sun Microsystems, 'Secure Computing With Java,' White Papers, 1997.
    8. Available via http://java.sun.com/marketing/collateral/security.html

    9. Li Gong, 'Java Security Present and near Future,' JavaOne Conference, April. 1997.
    10. Available via http://java.sun.com/javaone

    11. Li Gong, 'Java Security Present and near Future,' IEEE Micro, pp.14-19, May/JUNE. 1997.
    12. Gary McGraw, and Edward Felten, 'Understanding the keys to Java security - the sandbox and authentication,' JavaWorld, May. 1997.
    13. Available via http://www.javaworld.com/javaworld/jw-05-1997/jw-05-security.html

    14. Sun Microsystems, 'HotJava&trade; : The security Story,' JavaWorld, May. 1995.
    15. Available via http://java.sun.com/sfaq/may95/ security.html

    16. T.Lindholm, and F.Yellin, "The Java Virtual Machine Specification," Addison-Wesly, 1997.
    17. Sun Microsystems, 'Java Cryptography Architecture API Specification & Reference,' May. 1997.
    18. Available via http://java.sun.com/product¡¦ide/security/Cryptospec.html

    19. William Stallings, Network And Internetwork Security Principle And Practice, Prentice Hall, Inc., 1995.
    20. Sun Microsystems, 'Using Javakey,' 1997.
    21. Available via http://java.sun.com/security/UsingJavakey.html

    22. Sun Microsystems, 'Manifest Format,' 1997.
    23. Available via http://java.sun.com/products/jdk/1.1/docs/guide/jar/manifest.html

    24. T J Hudson, and E A Young, 'SSLeay and SSLapps FAQ,' April. 1997.
    25. Available via http://psych.psy.uq.oz.au/~ftp/Crypto.html

    26. Merlin Hughes, 'JavaBeans and ActiveX go head to head,' JavaWorld, March. 1997.
    Available via http://www.javaworld.com/jw-03-1997/jw-03-avb-tech.html