TIL 019 | 인증(Authentication)

This Is Empty.·2021년 9월 24일
0

TIL

목록 보기
19/23
post-custom-banner

인증(Authentication) ?

Authentication은 유저의 identification을 확인(유저의 아이디와 비밀번호를 확인)하는 절차이다.

로그인 절차

  1. 유저 아이디와 비밀번호 생성
  2. 유저의 비밀번호를 암호화 해서 DB에 저장
  3. 유저가 로그인 시 아이디와 비밀번호를 입력하여 로그인
  4. 유저가 입력한 비밀번호를 암호화한 것과 DB에 저장된 유저 비밀번호와 비교
  5. 일치하면 로그인 성공
  6. 로그인 성공 시 access token을 클라이언트에 전송
  7. 유저는 로그인 성공 후에는 access token을 첨부해서 request를 서버에 전송함으로써 매번 로그인하지 않아도 된다.

비밀번호를 암호화 하는 이유

우리의 비밀번호는 항상 암호화 되어 data base에 저장된다.
만약 암호화되어 저장되지 않는다면 단순 data base해킹만으로도 유저의 비밀번호를 알아낼 수 있을 뿐 아니라 내부 개발자나 인력이 유저의 비밀번호를 마음대로 볼 수 있을 것이다.

단방향 해시 암호화


비밀번호 암호에는 단방향 해시 함수(one-way hash fucntion)이 일반적으로 쓰인다.

단방향 해시 함수는 다양한 길이의 원본 메시지를 변환하여 정해진 길이의 암호화 된 메시지인 digest를 생성한다. 원본 메시지를 알면 암호화 된 메시지를 구하기 쉽지만, 암호화 된 메시지로는 원본 메시지를 구할 수 없기 때문에 단방향이라고 한다.

test123sha256이라는 해시함수를 사용하면 ecd71870d1963316a97e3ac3408c9835ad8cf0f3c1bc703527c30265534f75ae라는 값이 나온다.


test456hash256이라는 해시함수를 사용하면
383cff75042ed4dc61fbc2c0fd4c41d4a3eb21d27b16155d3a7358e5864d648c라는 값이 나온다.

실제 비밀번호는 유사하지만 해시함수값은 완전히 다른것을 볼 수 있다. 이러한 효과를 avalance라고 하며 비밀번호 해킹을 어렵게 만드는 요소이다.

SHA-2(Secure Hash Alogorithm - 2)

  • 미국 국가 안전 보장국(NSA)이 2001년에 설계한 암호화 해시 함수들의 집합
  • 원래는 해시테이블의 빠른 검색을 위해 만들어졌다.
  • digest size는 SHA-224, SHA-256, SHA-384, SHA-512 4개의 추가 해시함수로 이루어져 있다.
  • 미리 해시값을 계산해 놓은 테이블을 사용하여 데이터베이스 시스템에 저장된 암호를 해독하려는 공격인 Rainbow table attack에 취약하다.

Bcrypt

단방향 해시 함수의 취약점을 보완하기 위해 일반적으로 다음 두가지의 보완점들이 사용된다.

  • Salting
    - 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해서 해시값을 계산하는 방법
  • Key Stretching
    - 단방향 해시값을 계산 한 후 그 해시값을 또 해시하고, 또 이를 반복하는 방법

Salting과 Key Stretching을 구현한 해쉬 함수중 가장 널리 사용되는 것이 bcrypt이다. bcrypt는 처음부터 비밀번호를 단방향 암호화 하기 위해 만들이전 해쉬함수 이다.

  • 블로피시 암호에 기반을 둔 암호해시함수로 1999년 발표되었다.
  • Rainbow table attack을 방지하기 위해 salt를 추가하였다.
  • 시간이 지남에 따라 반복 횟수를 증가시켜 더 느리게 만들 수 있으므로 계산 능력이 증가하더라도 브루트 포스 검색 공격에 대비가 가능하다.


test123hashpw라는 함수를 사용하면 $2b$12$rit9rbyw6AqvDnCoWVmRL.LfJCSn3llGXcsCyyu6oIyOdVHepRcE라는 바이트 값이 나온다. 이 값을 다시 16진수로 변환하면 243262243132243462366555754c743976304d762f747536745a637a2e694e67676f6a685857725954654d483869324e7967756344764f7a396d454f값이 나온다

sha256 : ecd71870d1963316a97e3ac3408c9835ad8cf0f3c1bc703527c30265534f75ae
bcrypt : 243262243132243462366555754c743976304d762f747536745a637a2e694e67676f6a685857725954654d483869324e7967756344764f7a396d454f

salt

암호학에서 salt는 데이터, 비밀번호, 통과 암호를 해시처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터를 말한다.
과거에는 암호의 암호화 해시 함수만 시스템에 저장되었지만, 시간이 지나면서 중복되거나 공통적인 암호(hash가 동일함)를 식별할 수 없도록 추가적인 보호장치인 salt가 개발된 것이다.

  • 각각의 비밀번호에 대해 salt는 무작위로 생성된다.
  • 일반적으로 salt와 password는 암호화 해시 함수에 연결되어 공급되며 출력 해시값은 salt와 함께 데이터베이스에 저장된다.
  • salt는 해시 암호 자체와 별도로 암호화하거나 저장할 필요가 없다.

참고
python | hashlib
On the Secure Hash Algorithm
family

Rainbow table attack
bcrypt
salt

profile
Convinced myself, I seek not to convince.
post-custom-banner

0개의 댓글