'MD5'에 해당되는 글 3건

  1. 2012.08.11 [초보보안-20강] 리눅스 비밀번호 md5에서 SHA-512로 변경하기 (2)
  2. 2006.05.02 해쉬 함수
  3. 2006.03.12 해쉬함수

안녕하세요., 엔시스입니다. 최근 개인정보보호에 대하여 다양한 연구를 하다보니 법,제도에서부터 기술적인 부분까지 공부하게 됩니다. 그래서 더욱 이 분야가 어렵고 포괄적이지 않은가 하는 생각을 해 봅니다.


1. 리눅스 시스템의 비밀번호 방식은 MD5 해쉬함수


작년에 모 포털사 개인정보 유출시 3500만건인데 비밀번호가 유출이 되었는데 암호화 부문이 관건이었습니다. 현재는 소송에서 1심에서 승소판결을 구미에 변호사분 한분이 이끌어 냈으며, 2심이 진행되고 있습니다. 이때 핵심은 비밀번호 암호화 방식일 것입니다. MD5는 과연 안전한가?



우리가 기본적으로 리눅스 시스템을 설치하게 되면 MD5로 된 알고리즘으로 비밀번호가 저장이 됩니다. 




                                        [그림 -1] 리눅스에서 사용하고 있는 알고리즘 알아보기



위 [그림-1]에서와 같이 패스워드 알고리즘은 MD5로 나타내고 있습니다. 하지만 MD5는 암호 알고리즘이기 보다는 해쉬함수입니다. 


그럼 해쉬함수가 무엇인지 알아 볼까요?



해쉬함수는 (Hash Function)는 암호기법과 키가 필요없는 암호기법이라 합니다. 즉, 메세지 다이제스트라고도 불리우는 해쉬함수는 키를 사용하지 않는 대신에 원본 메세지에 기반하여 고정된 길이의 해쉬 값을 생성하게 되지요.


그 해쉬값은 메세지가 변형이 되었을때 초기에 해쉬값고 비교해 보아 다르게 나오면 메세지가 변형이 되었다고 판단하게 되는 것입니다. 이러한 해쉬는 무결성은 제공하지만 기밀성은 제공하지 않습니다.  해쉬함수중에 대표적인 것이 바로 md5입니다. 그외에 SHA-256, SHA-512등이 있습니다. 



하지만 MD5는 컴퓨팅 파워의 증가로 인하여  꺠어진다는 것이 증명이 되었습니다. 위험하다는 것이죠. 

만약, 기본값인 MD5로 개인정보인 비밀번호를 그대로 놔 두었고 그것이 유출되었다면 과연 안전할까요? 아마도 크랙하면 충분히 비밀번호를 크랙 할 수있을 것입니다. 



2. MD5보다 더 강력한 SHA-512로 변경하려면 


그럼 기본값이 MD5를 간단하게 조금 강력한 SHA-512로 변경 할 수있을까요? 네..가능하기 떄문에 포스팅 하는 것이겠지요.




                                     [그림-2] SHA-512 함수로 변경 하는 방법



간단한 명령어 몇줄이면 변경 할수 있는 방법이 있습니다. 위 그림-2 의 방법대로 명령어를 치면 됩니다. 그리고나서 다시한번 패스워드 알고리즘을 살펴 보면 변경 된 것을 알수 있습니다. 가장 합리적인 방법으로 개인정보를 수집하는 방법은 타인의 아이디와 패스워드를 힉득하여 로그인 절차를 거쳐서 개인정보를 수집하는 것이겠지요.


따라서 , 리눅스에서 제공하는 기본적인 패스워드 알고리즘 방법으로는 안전하다 할수없으므로 관리자는 조금 더 신경을 기울여 위와 같은 작업을 해 주면 혹시나 모를 비밀번호 유출에도 안전하게 대처하는 방법이 될 것입니다. 개인정보보호하니까 무조건 솔루션 도입만 생각하기 보다는 우선 처리할 수 있는 다양한 계층적 방어막을 사용하는 것이 바람직한 보안이라 할 것입니다.  이중 삼중으로 철처한 보안을 하는 것이지요. 이는 추후 개인정보 유출시 개인정보처리자의 입증책임에도 관련이 될 것입니다.



3. 일반 계정 사용자는 어떻게 적용시킬까?


시스템 전반적인 것은 MD5 -> SHA-512로 변경을 해 놓았지만 현재 각 일반 유저들이 사용하는 패스워드는 여전히 MD5 형태로 저장이 되어 있습니다. 이러한 일반 사용자들 비밀번호를 사용자가 변경 하도록 유도를 하여야 합니다. 다음은 그 방법입니다. 





                              [그림 -3] 일반사용자에게 강제적인 비밀번호변경 하게 하는 방법


위 그림-3과 같이 명령어 한줄이면 아래 그림-4와 같이 다음 로그인 접속시에 강제적으로 패스워드를 변경하게끔 할수있습니다.  유용한 방법이겠지요..다만 계정 마다 일일이 명령을 내려 주어야 해서 수많은 계정을 관리할때에는 수작업이 필요하겠습니다. 아니면 스크립트를 만들어서 사용하면 조금 더 편리하게 작업 할 수있겠지요.




                    [그림-4] 일바 사용자 계정으로 로그인시 강제적인 패스워드 변경메세지




결론 


개인정보를 보호하는 연구를 지속적으로 하면서 운영체제와 시스템에서 하나씩 방법을 찾아 차곡차곡 쌓아간다면 굳이 많은 비용을 들이지 않더라도 보호조치가 되지 않을까 생각해 봅니다. 위 포스팅은 그 일부분에 지나지 않겠지만 우리가 모르는 또 다른 방법이 존재 한다면 그것을 연구하고 조직과 기업에 적용하여 고객의 정보를 안전하게 보호하는 것이 사회적책임을 다하는 길이라 생각이 듭니다. 중소기업이라고 무조건 우리는 돈도 없고 인력도 없고 안되는 방법만 부정적인 생각만 하는 것이 아닌 될수 있는 방법을 생각해 보면 하나두개씩 나오게 마련이겠지요. 혹자는 이런거 하나가지고 호들갑이냐고 이야기 하겠지만 아는 만큼 보인다라는 말이 있습니다. 지식은 쌓이고 쌓여서 바로 커다란 통찰력을 가져 오는 것이지요. 기술적 보호조치에서 돈 안들이고 할 수있는 방법이 있으면 찾아서 해야 하지 않을까요?  이상 엔시스였습니다. @엔시스.

2012-08-11 10:59


참고 사이트

http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-upgrading-password-hashing/ 




신고
Posted by 엔시스

해쉬알고리즘은 데이터 무결성 및 메시지 인증 등에서 사용할 수 있는 함수로써 정보보호의 여러 메커니즘에서 이용되는 핵심 요소기술이다. 해쉬알고리즘이란 임의의 길이의 비트 열을 고정된 길이의 출력값인 해쉬코드로 압축시키는 함수이며, 암호학적 응용에 사용되는 대부분의 해쉬함수는 강한 충돌저항성을 지닐 것이 요구된다. 암호학적 해쉬알고리즘의 충돌 저항성은 디지털 서명에서 송신자외의 제 3자에 의한 문서위조를 방지하는 부인방지 서비스를 제공하기 위한 필수적인 요구조건이 된다.

해쉬알고리즘은 크게 DES와 같은 블록암호알고리즘에 기초한 해쉬알고리즘과 전용 해쉬알고리즘으로 나눌 수 있다. 블록암호를 이용한 해쉬알고리즘은 이미 구현되어 사용되고 있는 블록암호를 사용할 수 있다는 이점이 있으나, 대부분의 불록암호알고리즘의 속도가 그리 빠르지 않을뿐더러 이를 기본함수로 이용한 해쉬알고리즘의 경우 블록암호보다도 훨씬 더 속도가 떨어지므로 현재는 대부분의 응용에서 전용 해쉬알고리즘이 주로 이용된다.


(가) 해쉬 함수의 일반 사항


해쉬함수는 임의의 입력 비트열에 대하여 일정한 길이의 안전한 출력 비트열을 내는 것으로, 정보통신 보호의 여러 메커니즘에서 활발히 이용되는 요소 기술이다. 해쉬함수란 입력 데이터 스트링을 고정된 길이의 출력인 해쉬코드로 대응시키는 함수로서 첫째, 주어진 해쉬코드에 대하여 이 해쉬코드를 생성하는 데이터 스트링을 찾아내는 것은 계산상 실행 불가능하며, 둘째 주어진 데이터 스트링에 대하여 같은 해쉬코드를 생성하는 또 다른 데이터 스트링을 찾아내는 것은 계산상 실행 불가능하다는 두 가지 성질을 만족하는 함수를 말한다. 여기서 계산상의 실행 가능성의 여부는 사용자의 특정한 보안 요구와 환경에 영향을 받는다.

해쉬함수는 전자서명에 많이 사용되고 있다. 입력 M에 해쉬함수를 취한 결과인 해쉬코드 h(M)에 송신자는 비밀키로 서명을 하고, 수신자는 이를 공개키로 확인한 후 그 결과 h(M)을 수신된 M에 해쉬함수를 취한 결과의 값과 비교하여 서명의 진위 여부를 밝힌다. 아울러 해쉬함수는 정보의 무결성(integrity)에도 활용 될 수 있다. 무결성 검증을 원하는 정보의 해쉬코드를 계산하여 안전하게 보관하다가 무결성 검증이 필요할 때 다시 해쉬코드를 계산하 여 보관한 해쉬코드의 값과 비교함으로써 정보의 무결성을 확인할 수 있다.


(나) 대표적인 해쉬함수들


1) SNEFRU


1990년 R.C.Merkle에 의하여 32비트 프로세서에서 구현을 용이하게 할 목적으로 제안된 해쉬함수로서 128 또는 256비트해쉬코드를 생성한다. 이 SNEFRU의 핵심은 512비트의 입력을 m비트(여기서는 128비트 또는 256비트)해쉬코드로 하는 함수 h로서 이 함수를 반복 사용하게 된다.

1993년 Biham과 Shamir에 의한 차분 공격법(DC, Differential Cryptoanalysis)에 의하여 2패스의 128비트 SNEFRU가 수분 안에 해독되었다 . 이 128비트 SNEFRU가 264 연산이 필요한 반면, DC 공격에 의하면 같은 해쉬코드를 위한 두 입력쌍을 찾기 위하여 3패스는 228.5의 연산이, 4패스는 244.5의 연산이 필요하다.


2) N-HASH


1989년 FEAL을 개발했던 일본 NTT의 Miyaguchi 등이 발표한 것으로 128비트의 입력에 대한 출력 해쉬코드를 128비트 생성한다. 그러나 N-HASH는 Bert Bore에 의하여 1993년 해독된 것으로 보고되었으며 1991년, 1993년 Biham과 Shamir에 의한 DC에 의하여 6라운드까지 해독되었다. 이 공격에 안전하려면 15라운드의 N-HASH를 사용하여야 한다고 알려지고 있으며, 이는 272의 복잡도를 가지고 있다.


3) MD4와 MD5


1990년 10월 Ron Rivest에 의하여 개발된 MD4는 다음과 같은 특징을 가지고 있다.


안전성 : 통상적인 해쉬함수의 안전성을 확보하고 있다 .

효율성 : 32비트의 기반 구조를 가진 빠른 알고리즘으로 구성하여 실행 속도에 효율성을 확보하고 있다.

단순성 : 알고리즘은 일반적으로 많은 양의 프로그램이나 치환표의 요구 없이 프로그램과 표현이 단순하여야 한다. 이는 안전선의 관점에서도 중요하다.


이러한 특징에도 불구하고 1992년 마지막 두 라운드가 Bert den Boer등에 의하여 해독되었고, DC 공격에 의해서도 해독되기에 이르렀다.


4) SHA


SHA(Secure Hash Algorithm, 표준 해쉬 알고리즘)은 1993년 미국 NIST에서 개발하여 미국표준 FIPS PUB 180으로 공포되었고, 160비트의 해쉬코드를 출력하며, MD4 알고리즘에 기반을 둔 해쉬함수이다.


5) SHA와 MD5의 비교


양쪽 다 MD4로부터 나왔기 때문에 SHA와 MD5는 서로 아주 유사하다. 따라서 그들의 강도와 특성도 비슷하다.


. 안전성

가장 명료하고 가장 중요한 차이는 SHA에 의한 해쉬코드가 MD5에 의한 해쉬코드보다 32비트 더 길다는 것이다. 타당한 가정과는 거리가 있지만, 만일 어느 알고리즘도 암호 해독의 공격에 취약한 어떤 구조적 결점을 가지고 있지 않다면 SHA가 더 강한 알고리즘이다.


. 속도

두 알고리즘의 법 232 상에서의 덧셈에 의존해 있기 때문에 둘 다 32비트 구조로 수행된다. SHA는 더 많은 단계(80 대 64)를 포함하고, MD5보다 약 25% 느리게 실행된다.


. 단순성과 간결성

두 알고리즘은 큰 프로그램이나 대치표 등을 요구하지 않기 때문에 표현하기와 실현하기가 간단하다. 그러나 SHA는 하나의 단일 단계구조이나 MD5는 4개의 구조를 사용한다. 더욱이 버퍼 단어의 조작은 모든 SHA 단계에서 동일하나, MD5에서 단어의 변수는 각 단계에 대하여 각 각 처리한다. 그러므로 이 관점에서는 SHA가 유리하다.


. Little-endian 대 Big-endian 구조

MD5는 32비트 단어 계열로서 메시지를 해석하는데 little-endian 방식을 사용하는 반면, SHA는 big-endian 방식을 사용한다. 어느 쪽의 접근에 대하여서도 강한 이점은 없다.



신고

'Security Skill&Trend' 카테고리의 다른 글

인증 기법의 종류  (0) 2006.05.02
PKI는 무엇인가?  (1) 2006.05.02
해쉬 함수  (0) 2006.05.02
윈도우98 보안지원 중단 안내 및 보안가이드라인 배포  (0) 2006.05.01
정보보호 기술 분야  (2) 2006.05.01
port scanner  (0) 2006.04.28
Posted by 엔시스

해쉬함수는 그림 8 과 같이 임의의 길이의 비트스트링을 고정된 길이의 출력값인 해쉬코드로 압축시키는 함수이다.

그림 8 : 해쉬 함수

해쉬함수가 만족해야하는 성질은 다음과 같다.

  • 주어진 출력에 대하여 입력값을 구하는 것이 계산상 불가능하다 (일방향성).
  • 주어진 입력에 대하여 같은 출력을 내는 또 다른 입력을 찾아내는 것이 계산상 불가능하다.
  • 같은 출력을 내는 임의의 서로 다른 두 입력 메세지를 찾는 것이 계산상 불가능하다 (강한 충돌 회피성).

위와 같은 성질은 만족하는 해쉬함수는 데이터의 무결성, 인증, 부인 방지 등에서 응용되는 중요한 함수 중의 하나이다. 일례로 전자서명의 경우 몇 바이트에서 수 기가바이트에 이르는 다양한 크기의 메시지를 직접 전자서명 프로토콜에서 사용한다는 것은 문제가 있으므로, 메시지를 해쉬코드로 압축하고 이를 이용하여 전자서명값을 생성한다. 이 때 또다른 어떤 메시지가 동일한 해쉬코드를 생성한다면 위의 전자서명값은 또다른 메시지에 대한 서명도 되므로 큰 문제가 발생한다. 실제로 이러한 문제가 발생하지 않는 것은 해쉬함수가 강한 충돌회피성을 가지고 있으므로, 이론적으로 동일한 해쉬코드를 가지는 메시지가 무한히 존재함에도 불구하고 현실적으로 동일한 해쉬코드를 가지는 한 쌍의 메시지를 찾을 수는 없기 때문이다.

해쉬함수에는 블록암호 알고리즘과 같은 기존의 알고리즘들을 이용하여 구성할 수도 있으나 안전성과 효율성면에서 전용 해쉬 함수를 사용하는 것이 바람직하다.

Birthday 공격에 의하면 출력길이 n인 해쉬함수에 대해 2n/2 정도의 연산이면 충돌쌍을 찾을 수 있다. 특히 128 비트 출력을 가지는 MD5의 충돌회피성에서 문제점이 있다는 것이 밝혀졌으므로 현재는 출력길이 160 비트 이상의 해쉬함수를 사용하도록 권장되고 있다.

대표적인 해쉬함수로는 1993년 NSA에 의해 설계된 SHA를 1995년에 수정/보완한 SHA-1이 있으며 미 연방 표준으로 채택되었다. SHA-1은 160 비트의 출력을 가지며 대부분의 공격에 강한 저항성을 갖는다. 그러나 AES의 키 길이가 128, 192, 256 비트를 지원함에 따라서 출력길이가 256, 384, 512 비트인 해쉬함수의 필요하게 되어 현재 SHA-256, SHA-384, SHA-512가 개발중에 있다.

HAS-160은 SHA-1과 MD5의 장점을 취하여 국내 표준 해쉬 함수로 개발된 것으로 SHA-1과 마찬가지로 160 비트의 출력길이를 갖는다. HAS-160은 국내 표준 서명 알고리즘인 KCDSA에 사용된다.

신고

'Security Skill&Trend' 카테고리의 다른 글

공개키 암호  (2) 2006.03.12
MAC 알고리즘  (0) 2006.03.12
해쉬함수  (0) 2006.03.12
대칭키 운영모드  (0) 2006.03.12
암호의 종류  (0) 2006.03.12
zone-transfer 문제점과 대응방안  (0) 2006.03.12
Posted by 엔시스