2008. 2. 21. 21:04

MD5                                                                                                           

md5 & SHA1  : Collisions for Hash Functions
 
md5와 SHA1이 깨졌다고 신문기사가 났는데..
이번 기회에 Hash Function에 대해서 생각해보도록 합시다.

그런데, 깨졌다기 보다는 정확히는 특정한 문장에 대한 md5 해시 값과 똑같은 결과를 리턴하는
md5 값을 수학적으로 찾아낼 수 있음이 증명되었다는 것이랍니다.

참고로, md5로 해시한 문자열의 수학적인 복호화는 불가능하다는것이 이미 증명되어 있습니다.

이론적으로 md5는 16진수의 32비트 문자열의 해시가 리턴되므로, 16^32 가지의 경우의 수가 존재하며,
md5에 들어갈 수 있는 문자의 수는 무한하므로 비둘기집의 원리 따라 같은 결과를 나타내는
 두개 이상의 문자열이 반드시 존재합니다.



여기서는 특정한 문자열 1 (string1) 을 가지고 똑같은 md5 해시값을 가리키는 문자열 2 (string2) 를
 알아낼 수 있다는 것을 증명한 것입니다.

MD5 중복값 예제:

> 예제 1:

첫번째 해시: 2ba3be5aa541006b62370111282d19f5
두번째 해시: 2ba3be5aa541006b62370111282d19f5

첫번째 문장: pmTquIkEwqxIQ0EOCmNCVBZgbIFELdaNQARYPrj7f4lVrTQGCfSzAoPkiIMlcUFaCFEl6PfNyZ/
ZHb3ygDc8W5eevbQOKm4XpiNXJNHfQbRGc/mW8WJK3RApMWfQCbGPdad/eTDZXOsC6K26
eshVXO10yt1fyZNtsZtK2DXMZ+M=

두번째 문장: pmTquIkEwqxIQ0EOCmNCVBZgbAFELdaNQARYPrj7f4lVrTQGCfSzAoPkiIMl8UFaCFEl6PfNyZ/
ZHb1ygDc8W5eevbQOKm4XpiNXJNHfQbRGc/kW8WJK3RApMWfQCbGPdad/eTDZXOsC6K26
ekhVXO10yt1fyZNtsZtKWDXMZ+M=

if (문장1==문장2): false

- 원래 문자열은 바이너리로, 위의 문자열은 base64로 인코드 되어 있습니다.
  디코드 하신후 테스트 하시기 바랍니다.

<Test by Python>

>>> import base64
>>> import md5
>>> string1 = base64.b64decode("pmTquIkEwqxIQ0EOCmNCVBZgbIFELdaNQARYPrj7f4lVrTQGCfSzAoPkiIMlcUFaCFEl6PfNyZ
/ZHb3ygDc8W5eevbQOKm4XpiNXJNHfQbRGc/mW8WJK3RApMWfQCbGPdad/eTDZXOsC6K26
eshVXO10yt1fyZNtsZtK2DXMZ+M="
)
>>> string2 = base64.b64decode("pmTquIkEwqxIQ0EOCmNCVBZgbAFELdaNQARYPrj7f4lVrTQGCfSzAoPkiIMl8UFaCFEl6PfNyZ
/ZHb1ygDc8W5eevbQOKm4XpiNXJNHfQbRGc/kW8WJK3RApMWfQCbGPdad/eTDZXOsC6K26
ekhVXO10yt1fyZNtsZtKWDXMZ+M="
)

>>> print md5.new(string1).hexdigest()
2ba3be5aa541006b62370111282d19f5
>>> print md5.new(string2).hexdigest()
2ba3be5aa541006b62370111282d19f5

>>> string1 == string2
False
Posted by newpolaris
2008. 2. 21. 21:02
확장자가  `.tar.gz', `.tar.z', `.tgz'  인 파일들은

tar -xvzf name.tar.gz
tar xvzf name.tgz

위와 같이 xvzf 옵션으로 풀린다.
하지만 이게 왠일


bash-2.03$ ls
dat.log  local.cshrc  local.login  local.profile  snort.tar.gz
bash-2.03$ tar xvzf snort.tar.gz
tar: z: unknown option
Usage: tar {txruc}[vfbFXhiBDEelmopwnq[0-7]] [-k size] [tapefile] [blocksize] [exclude-file] [-I include-file] files ...

z를 모른다네..

tar의 z옵션이 gzip압축된 tar파일을 풀어줄 수있게 하는 옵션인 것은 아실것입니다.
문제는 솔라리스(2.5이상 10이하)에 있는 tar는 이 z옵션이 없습니다.
그래서 tar -xvzf를 사용할 수 없죠.

대신 사용할 수 있는 방법이

#gunzip a.tar.gz
#tar xvf a.tar
- by
세이군
라고 한다.

"gunzip < a.tar.gz | tar xvf -"  는

gunzip < a.tar.gz 
a.tar.gz 파일을 gunzip 에 stdin 으로 집어 넣습니다.

그럼 gunzip 은 풀어서 stdout 으로 보내겠죠 ( 현재까지는 gzip만 풀린상태 ) 그것을 파이프로 받아
그리고 tar xvf - 에서 '-' 는 stdin 으로 받으라는 말입니다.

< 나머지 옵션들 >
-c 디렉토리를 포함하여 여러개의 파일들을 묶을 때 사용한다(Create).
-x 디렉토리를 포함하여 묶인 파일의 압축을 풀겠다는 것을 tar에게 알린다(eXtract). 
-v 작업 진행 상황을 화면에 표시한다(Verbose)
-t tar 파일안에 있는 파일이나 디렉토리 목록을 볼 때 사용하는 옵션이다(lisT). 

-f <파일명>
파일을 묶을 때는 출력 파일, 파일의 압축을 풀때는 입력 파일을 이 옵션 뒤에 써 준다(File).
<파일명>에는 /dev 디렉토리 밑의 장치명이 올 수도 있다. 이 때는 그 장치명에 해당하는 장치를
출력으로 하거나 입력으로 한다.
Posted by newpolaris
2008. 2. 21. 21:00
늘 find 를 쓰면서 나온 목록을 보고 ls -al 을 쳤었다.

한번에 자세히 보려면 어떻게 해야하지 하고 궁금했는데 운좋게 발견했다.

find / -name mount -exec ls -al {} \;

(find -help만 치면 나오는 내용이기도 하다)

-exec COMMAND \;

find가 찾아낸 각각의 파일에 대해 COMMAND를 실행합니다. COMMAND\;으로 끝나야 합니다(find로 넘어가는 명령어의 끝을 나타내는 ;를 쉘이 해석하지 않도록 이스케이프 시켜야 합니다

자세한건 : http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/moreadv.html
그리고 우리의 man 그것마저 귀찮으면 find -help

...man, find -help 가 귀찮아서 검색하려는분은 있으려나;

# find / -name mount 2> /dev/null -exec ls -al {} \;
-rw-r--r--    1 root     sys            22 May  6  2006 /usr/lib/adb/sparcv9/mount
-rw-r--r--    1 root     sys            22 May  6  2006 /usr/lib/adb/mount
-r-xr-xr-x    1 root     bin         44412 May  6  2006 /usr/lib/fs/cachefs/mount
-r-xr-xr-x    1 root     bin         10104 May  6  2006 /usr/lib/fs/fd/mount
-r-xr-xr-x    1 root     bin         10220 May  6  2006 /usr/lib/fs/hsfs/mount
-r-xr-xr-x    1 root     bin          9900 May  6  2006 /usr/lib/fs/lofs/mount
-r-xr-xr-x    1 root     bin          9844 May  6  2006 /usr/lib/fs/mntfs/mount
-r-xr-xr-x    1 root     bin         44636 May  6  2006 /usr/lib/fs/nfs/mount
-r-xr-xr-x    1 root     bin         10104 May  6  2006 /usr/lib/fs/proc/mount
-r-xr-xr-x    1 root     bin         10200 May  6  2006 /usr/lib/fs/tmpfs/mount
-r-xr-xr-x    1 root     bin         19136 May  6  2006 /usr/lib/fs/ufs/mount
-r-xr-xr-x    1 root     bin          9968 May  6  2006 /usr/lib/fs/pcfs/mount
-r-xr-xr-x    1 root     bin         10156 May  6  2006 /usr/lib/fs/udfs/mount
-r-xr-xr-x    1 root     bin         10116 May  6  2006 /usr/lib/fs/autofs/mount
-r-xr-xr-x    1 root     other       16904 May  6  2006 /usr/lib/fs/ext2fs/mount
-r-xr-xr-x    1 root     bin         27220 May  6  2006 /usr/sbin/mount
-r-xr-xr-x    1 root     bin        219184 Jan  6  2000 /etc/fs/hsfs/mount
-r-xr-xr-x    1 root     bin        874532 Nov  7  2003 /etc/fs/nfs/mount
-r-xr-xr-x    1 root     bin        241572 Feb 16  2002 /etc/fs/ufs/mount
lrwxrwxrwx    1 root     root           17 Apr 20 15:04 /etc/mount -> ../usr/sbin/mount
-rwsr-xr-x    1 root     root        56208 Feb  3  2000 /mnt/bin/mount
-r-xr-xr-x    1 root     bin        262252 Nov  7  2003 /sbin/mount
total 3
drwxr-xr-x    3 root     other         512 Jan 26  2005 .
drwxr-xr-x   37 root     root         1024 Jul  5 11:42 ..
drwxr-xr-x    2 root     other         512 Jan 26  2005 cdrom
total 1550350
Posted by newpolaris