'보안'에 해당되는 글 2건

  1. 2019.09.30 암호화
  2. 2019.09.25 CSRF
posted by JakeYeom 2019. 9. 30. 17:07

단방향 해시 함수

  • 암호화연산을 통해 원본 메시지를 변화시켜 다이제스트(해싱 공식에 생성된 문자열)를 생성
  • 단방향성: 원본메시지를 구하면 암호화된 메시지를 구하기는 쉽다. 그러나 암호화된 메시지로 원본 메시지를 구할수는 없다.

 

단방향 해시함수의 문제점

  1. 인식 가능성: 동일한 메시지가 항상 동일한 다이제스트를 갖는다면 해커가 다이제스트를 많이 확보한뒤 결과를 토대로 원본메시지를 유추해거나 악용할 수 있다. 이와 같은 다이제스트 목록을 레인보우 테이블이라하고 레인보우 공격이라 한다.
  2. 속도: 해시함수의 목적이 짧은시간에 데이터를 검색하기 위해 설계된것이다. 해시함수의 빠른속도를 이용하여 해커가 다이제스트를 원본문자열과 비교해볼 수 있다(데이터가 충분히 길거나 복잡하지 않은 경우 탈취가능).

 단방향 해시함수 보완하기

  • 솔팅(Salting): 솔트(salt)는 단방향 해시 함수에서 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열이다. 이 원본 메시지에 문자열을 추가하여 다이제스트를 생성하는 것을 솔팅이라한다. 솔트의 길이는 32바이트 이상이어야 솔트와 다이제스트를 추측하기 어렵다.
  • 키 스트레칭(key stretching): 원본메시지를 암호화로 다이제스트를 생성하고, 생성된 다이제스트를 입력 값으로 하여 다이제스트를 생성하고, 이를 반복하는 방법으로 다이제스트를 생성할 수 있다. 이렇게 하면 입력한 패스워드를 동일한 횟수만큼 해시해야 입력한 패스워드 일치 여부를 확인할 수 있다. 이것을 키 스트레칭이라 한다.
  • Adaptive Key Derivation Functions: 다이제스트를 생성할 때 솔팅과 키 스트레칭을 반복하며 솔트와 패스워드 외에도 입력 값을 추가하여 공격자가 쉽게 다이제스트를 유추할 수 없도록 하고 보안의 강도를 선택할 수 있다.
  • adaptive key derivation function중 주요한 key derivation function
    • PBKDF2: 가장 많이 사용된다. 해시 함수의 컨테이너로 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있다.
      • DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
      • PRF: 난수, Password: 패스워드, Salt: 암호학 솔트, c: 원하는 반복 수, DLen: 원하는 다이제스트 길이
    • bcrypt: 패스워드 저장을 목적으로 설계됨. OpenBSD에서 기본적인 암호 메커니즘으로 사용됨.
      • bcrypt에서 "work factor"인자는 하나의 해시 다이제스트를 생성하는데 얼마만큼의 처리과정을 수행할지 결정한다. "work factor"를 조정하는 것만으로 보안을 높일수도 있다.
      • String hashed = BCrypt.hashpw(password, BCrypt.gensalt(11)); // gensalt is work factor
      • PBKDF2나 scrypt와는 달리 입력값으로 72 bytes character를 사용해야 한다.
    • scrypt: 다이제스트 생성할 때 메모리 오버헤드를 갖도록 설계되어, brute-force attack(모든경우의 수 대입)을 시도할 때 병렬화 처리가 매우 어렵다. PBKDF2보다 안전하다고 평가되며 bcrypt보다 경쟁력이 있다고 여겨진다.
      • DIGEST = scrypt(Password, Salt, N, r, p, DLen)
      • Password: 패스워드, Salt: 암호학 솔트, N: CPU 비용, r: 메모리 비용, p: 병렬화(parallelization), DLen: 원하는 다이제스트 길이

 

'보안' 카테고리의 다른 글

CSRF  (0) 2019.09.25
posted by JakeYeom 2019. 9. 25. 16:26

CSRF(Cross-site request forgery, 사이트 간 요청 위조): 사용자가 웹사이트에 로그인 상태에서 사이트간 위조 공격 코드가 삽입된 페이지를 열면, 서버는 해당요청을 신뢰할 수 있는 사용자의 요청으로 인지하여 공격을 받을 수 있다.

 

[공격과정]

1. 서비스 이용자가 로그인하여 쿠키를 발급받는다.

2. 공격자는 링크를 서비스 이용자에게 전달한다. (이메일, 게시판등의 경로)

3. 공격용 html 페이지가 변조된 URL경로를 가진다. ( 변조된 URL 경로는 어떤 공격의 의미를 가지고 있다. )

4. 서비스 이용자가 공격용 페이지를 열면 브라우저는 이미지 파일을 받아오기 위해 공격용 html에 포함되어있는 변조된 URL을 요청한다.

5. 서비스 이용자의 승인이나 인지 없이 변조된 URL요청이 해당서버에 전달된다.  해당 서버는 인증에 있어 단순하게 쿠키로 확인을 하기 때문에 사용자 인증에 있어서 전혀 문제가 없으므로 공격자가 의도한대로 요청이 전달되어 수행된다.

 

 

 

'보안' 카테고리의 다른 글

암호화  (0) 2019.09.30