joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
¼Ò°³±Û¿¡¼ ¹ßÇûµíÀÌ crypt ´Â ´Ü¹æÇâ ÇØ½¬ ÇÔ¼ö¸¦ »ç¿ëÇϹǷÎ, µ¥ÀÌŸ¸¦ º¹È£È
Çϴ¹æ¹ýÀº ½±Áö°¡ ¾Ê´Ù. ±×·¯¹Ç·Î º¸Åë µ¥ÀÌŸ¸¦ º¹È£ÈÇÒ Çʿ䰡 ¾ø´Â "ÀÎÁõ"
ºÐ¾ß¿¡ ÁÖ·Î ¾²ÀδÙ.
±×·± ÀÌÀ¯·Î ¾ÏÈ£È¿Í µ¿½Ã¿¡ º¹È£È ±îÁö ½Å°æ¼¾ß ÇÑ´Ù¸é, RSA °°Àº
°ø°³Å° ±â¹ÝÀÇ ¾Ë°í¸®ÁòÀ»
»ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù. ¿©±â¿¡ ´ëÇØ¼´Â ³ªÁß¿¡? ¾ê±â¸¦ ÇØº¸µµ·Ï ÇϰڴÙ.
¾î¶µç À§¿¡¼ ¸»ÇßµíÀÌ, ¾ÏÈ£ÈµÈ µ¥ÀÌŸ¸¦ Å©·¢Çس»´Â °è»êÀÌ ¾î·Æ´Ù »ÓÀÌÁö
ºÒ°¡´ÉÇѰÍÀº ¾Æ´Ï¹Ç·Î ÃæºÐÇÑ ½Ã°£°ú ½Ã½ºÅÛÀÇ ¼º´É¸¸ µÞ¹ÙÄ§ÇØ µÐ´Ù¸é,
ÆÐ½º¿öµå Å©·¢ÀÌ °¡´ÉÇÏ´Ù. ±×·± ÀÌÀ¯·Î ÃÖ½ÅÀÇ Unix(Linux Æ÷ÇÔ)´Â crypt ¿¡
MD5 ±îÁö »ç¿ëÇØ¼ Å©·¢ÀÌ ´õ¿í ¾î·Æ°Ô ¸¸µé°í ÀÖ´Ù.
crypt ÀÇ ÇÔ¼ö¿øÇüÀº ´ÙÀ½°ú °°´Ù.
|
char *crypt (const char *key, const char *salt)
|
key °ªÀº ¾ÏÈ£È ½Ã۰íÀÚ ÇÏ´Â ¹®ÀÚ¿ÀÌ´Ù. ¿©±â¼ ÁÖ¸ñÇÒ²² salt ÀÌ´Ù.
salt °ªÀº 2°³ÀÇ ¹®ÀÚ¿·Î ÀÌ·ç¾îÁö´Âµ¥ [a-zA-Z0-9./] ÀÇ ¹®ÀÚµé·Î ±¸¼ºµÈ´Ù.
±×·¯¹Ç·Î °è»êÀ» ÇØº¸¸é ÇϳªÀÇ ¹®ÀÚ¿Àº 4096((26*2+10+2) ^ 2)
°¡ÁöÀÇ °¢ÀÚ ´Ù¸¥ salt °ªÀ» °¡Áú¼ö ÀÖ°Ô µÈ´Ù. crypt ÇÔ¼ö´Â ÀÌ salt °ªÀ» ÀÌ¿ëÇØ¼
¹®ÀÚ¿À» ¾ÏÈ£È ÇÑ´Ù.
salt °ªÀ» ÀÌ¿ëÇÑ ¾ÏÈ£È ¹æ¹ý¿¡ ´ëÇØ¼´Â
crypt(3) ÀÇ man page ¸¦ Âü°íÇϱâ
¹Ù¶õ´Ù.
±×·³ ¿¹Á¦¸¦ ÅëÇØ¼ crypt ÇÔ¼öÀÇ »ç¿ë¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸°Ú´Ù.
·£´ýÇÑ salt °ªÀ» »ç¿ëÇϱâ À§Çؼ
random(3),
srandom(3)À» »ç¿ëÇß´Ù.
¿¹Á¦
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
void get_salt(char **seed);
int main(int argc, char **argv)
{
char *seed;
if (argc != 2)
{
printf("Usage : ./crypt [passwd]\n");
exit(0);
}
seed = (char *)malloc(3);
memset(seed, '\0', 3);
get_salt(&seed);
printf("¿ø ¹® : %s\n", argv[1]);
printf("¾ÏÈ£¹® : %s\n", crypt(argv[1], seed));
free(seed);
}
void get_salt(char **seed)
{
time_t now_time;
char first_seed[3];
char *salt_set="./abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789";
memset(first_seed, '\0', 3);
time(&now_time);
srandom((unsigned int)now_time);
first_seed[0] = salt_set[random() % 64];
first_seed[1] = salt_set[random() % 64];
memcpy(*seed, first_seed, 3);
}
|
random ÇÔ¼ö´Â random seed °ª¿¡ ÀÇÇØ¼ µ¹·ÁÁö´Â °ªÀÌ °áÁ¤µÈ´Ù.
Áï °°Àº random seed °ªÀ» °¡Áö°Ô µÈ´Ù¸é °°Àº °ªÀ» µ¹·ÁÁØ´Ù.
ÀÌ·¯ÇÑ random seed ´Â
srandom(3) ÇÔ¼ö¸¦ ÅëÇØ¼ ¸¸µé¾î ÁÖ°Ô µÈ´Ù.
srandom À» »ç¿ëÇÏÁö ¾ÊÀ»°æ¿ì random seed °ªÀº ±âº»ÀûÀ¸·Î 1·Î ¼¼ÆÃµÇ°Ô µÈ´Ù.
±×·¯¹Ç·Î srandom À» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é random À» »ç¿ëÇÑ´Ù°í ÇÏ´õ¶óµµ
¾ðÁ¦³ª °°Àº °ª¸¸À» µ¹·ÁÁÖ°Ô µÈ´Ù. À§¿¡¼´Â random seed °ªÀ» ´Ù¸£°Ô ÁÖ±â À§Çؼ
time(2) ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù. ÀÌ·¸°Ô µÇ¸é ÇÁ·Î±×·¥À» ½ÇÇàÇÒ¶§¸¶´Ù. À¯ÀÏÇÑ
random seed °ªÀ» »ç¿ëÇÒ¼ö ÀÖ°Ô µÈ´Ù.
´Ü, time ÇÔ¼öÀÇ °æ¿ì ½Ã°£À» "ÃÊ" ´ÜÀ§·Î °è»êÇϱ⠶§¹®¿¡ 1ÃÊ ½Ã°£¾È¿¡ ÇÁ·Î±×·¥À»
´Ù½Ã ½ÇÇà½Ã۸é random ÇÑ °ªÀ» ¾òÀ»¼ö ¾ø°Ô µÉ°ÍÀÌ´Ù.
À§ÀÇ ¼Ò½º¸¦ ÄÄÆÄÀϽÃ۱â À§Çؼ´Â crypt ¶óÀ̺귯 ¸¦ Æ÷ÇÔ½ÃÄÑÁà¾ß ÇÑ´Ù.
|
[yundream@localhost test]$ gcc -o crypt crypt.c -lcrypt
|
À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ¸é ¾Æ·¡¿Í °°Àº °á°ú¸¦ ¾òÀ»¼ö ÀÖÀ»°ÍÀÌ´Ù.
[yundream@localhost test]# ./crypt school
¿ø ¹® : school
¾ÏÈ£¹® : f9okROpUA9F0c
|