IT
posted by 구름너머 2014. 4. 29. 12:49

OWASP Top 10 2013

 

한글판 공식 버전은 OWASP 홈페이지(http://www.owasp.or.kr)

 

A1 - 인젝션
A2 - 인증 및 세션 관리 취약점
A3 - 크로스 사이트 스크립팅(XSS)
A4 - 취약한 직접 객체 참조
A5 - 보안 설정 오류
A6 - 민감 데이터 노출
A7 - 기능 수준의 접근 통제 누락
A8 - 크로스 사이트 요청 변조(CSRF)
A9 - 알려진 취약점이 있는 컴포넌트 사용
A10 - 검증되지 않은 리다이렉트 및 포워드

 

문제: 최근에 발표된 가장 심각한 웹 애플리케이션 보안 위험 10가지(OWASP Top 10 2013) 내용 중
6번째의 A6 - 민감 데이터 노출 에 대한 대응방법으로 "패스워드를 보호용으로 설계된 알고리즘으로
패스워드를 저장해야 한다" 고 권고하고 있다.


다음 중 패스워드를 보호용으로 설계된 알고리즘이 아닌 것은?
1) HashCrypt
2) bcrypt
3) scrypt
4) PBKDF2

 

 

 

OWASP Top 10 2013
한글판 공식 버전은 OWASP 홈페이지(http://www.owasp.or.kr)

 

A1 - 인젝션
A2 - 인증 및 세션 관리 취약점
A3 - 크로스 사이트 스크립팅(XSS)
A4 - 취약한 직접 객체 참조
A5 - 보안 설정 오류
A6 - 민감 데이터 노출
A7 - 기능 수준의 접근 통제 누락
A8 - 크로스 사이트 요청 변조(CSRF)
A9 - 알려진 취약점이 있는 컴포넌트 사용
A10 - 검증되지 않은 리다이렉트 및 포워드

 

A6 : 민감 데이터 노출
bcrypt, PBKDF2, scrypt와 같이 패스워드를 보호용으로 설계된
알고리즘으로 패스워드를 저장해야 한다.

1)PBKDF2
가장 많이 사용되는 key derivation function은 PBKDF2(Password-Based Key Derivation Function)이다. 해시 함수의 컨테이너인 PBKDF2는 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있다. PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.
PBKDF2는 NIST(National Institute of Standards and Technology, 미국표준기술연구소)에 의해서 승인된 알고리즘이고, 미국 정부 시스템에서도 사용자 패스워드의 암호화된 다이제스트를 생성할 때 사용한다.
PBKDF2의 기본 파라미터는 5개 파라미터다.
DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
-PRF: 난수(예: HMAC)
-Password: 패스워드
-Salt: 암호학 솔트
-c: 원하는 iteration 반복 수
-DLen: 원하는 다이제스트 길이

2)bcrypt
bcrypt는 애초부터 패스워드 저장을 목적으로 설계되었다. Niels Provos와 David Mazieres가 1999년 발표했고 현재까지 사용되는 가장 강력한 해시 메커니즘 중 하나이다. bcrypt는 보안에 집착하기로 유명한 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되고 있고 미래에 PBKDF2보다 더 경쟁력이 있다고 여겨진다.
bcrypt에서 "work factor" 인자는 하나의 해시 다이제스트를 생성하는 데 얼마만큼의 처리 과정을 수행할지 결정한다. "work factor"를 조정하는 것만으로 간단하게 시스템의 보안성을 높일 수 있다.
다만 PBKDF2나 scrypt와는 달리 bcrypt는 입력 값으로 72 bytes character를 사용해야 하는 제약이 있다.

3)scrypt
scrypt는 PBKDF2와 유사한 adaptive key derivation function이며 Colin Percival이 2012년 9월 17일 설계했다. scrypt는 다이제스트를 생성할 때 메모리 오버헤드를 갖도록 설계되어, 억지 기법 공격(brute-force attack)을 시도할 때 병렬화 처리가 매우 어렵다. 따라서 PBKDF2보다 안전하다고 평가되며 미래에 bcrypt에 비해 더 경쟁력이 있다고 여겨진다. scrypt는 보안에 아주 민감한 사용자들을 위한 백업 솔루션을 제공하는 Tarsnap에서도 사용하고 있다. 또한 scrypt는 여러 프로그래밍 언어의 라이브러리로 제공받을 수 있다.
scrypt의 파라미터는 다음과 같은 6개 파라미터다.
DIGEST = scrypt(Password, Salt, N, r, p, DLen)
-Password: 패스워드
-Salt: 암호학 솔트
-N: CPU 비용
-r: 메모리 비용
-p: 병렬화(parallelization)
-DLen: 원하는 다이제스트 길이

 


1. 해쉬함수에대한이해: 안전한 패스워드 저장
http://helloworld.naver.com/helloworld/318732
2. java예제:
http://howtodoinjava.com/2013/07/22/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/
3. java예제소스:
https://docs.google.com/file/d/0B7yo2HclmjI4ZDNfdlZ2YUhoSGM/edit?usp=sharing&pli=1