인증 Authentication🛒
PASSWORD
!법률로 강제함🛒
개인정보 보호법은 개인정보의 암호화에 대해서 다음과 같이 규정하고 있어요.
비밀번호, 바이오정보, 주민등록번호 등과 같은 주요 개인정보가 암호화되지 않고
개인정보 처리 스스템에 저장되거나 네트워크를 통해 전송될 경우, 노출 및 위*변조 등의 위험이 있으므로 암호화 등의 안전한 보호조치가 제공되어야해요.
* `암호화`는 개인정보 취급자의 실수 또는 해커의 공격 등으로 인해 개인정보가 비인가자에게 유*노출 되더라도 그 내용 확인을 어렵게 하는 보안기술이다.
즉, 시스템이 인터넷에서 격리된 네트워크에 위치하는 경우나, 예왹적인 개인정보 항목을 다루는 경우를
제외하고는 국가에서 권고하는 상용 암호화 알고리즘을 이용해 개인정보를 암호화하도록 법적으로 요구하고 있습니다.
단방향(Oneway) Hash🛒
해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해서 쓰지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용
(MD5, SHA-1) 이 둘은 보안에 취약함, SHA-256등이 있어요.
'1234'를 SHA-256 해싱하면 다음과 같아요.
어렵게 보이고 뭔가 식별 불가능해서 완벽해 보이지만
BUT 알고리즘으로 '1234'를 다시 해싱하면 항상 같은 결과가 나와요.
이와 같은 허점을 이용하여 가능한 경우의 수를 모두 해시값으로 만들어서 판매하는 서비스도 있어요.
Rainbow Table이라고 부르는 건데요. 이러한 Rainbow Table을 이용하여 해시값을 유추하는 사이트도 있어요.
이같은 허점을 보완하고자 SALTING과 KEY STRETCHING이라는 아이디어가 생겼어요. 비밀번호와 임의로 생성한 문자열(Salt)를 합쳐서 해싱하여 이 해시값을 저장하는 방법이에요.
소금치고 늘린다?!
Salting & Key Stretching 대표적인 라이브러리
인가 Authorization
서버는 사용자가 로그인 시, headers
에 메타데이터를 보내서 확인해요.
META 데이터는 -> JSON Web Token
(JWT)라고 해요.
위 그림은 JWT의 구조에요.
{"user-id":1, "exp":1539517391}