일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- greedy
- 프로그래머스
- 클라이언트 컴포넌트
- NextJS v13
- 중복선택
- 실전프로젝트
- 동전 0
- 알고리즘
- 그리디
- 탐욕알고리즘
- 로딩 후 실행
- 날씨 api
- 배열 메소드
- db수정
- 서버 컴포넌트
- 항해99추천
- 카테고리필터
- jQuery
- 항해99솔직후기
- 중복카테고리
- 배열 중복 제거
- 항해99후기
- 자바스크립트
- 항해99
- server component
- react
- JavaScript
- 백준
- 숫자를 별점으로
- 부트캠프항해
- Today
- Total
공부 및 일상기록
[네트워크] 패스워드의 전송, 보관 본문
패스워드는 매우 민감한 정보이기 때문에 보안이 굉장히 중요하다. 그렇다면 현재 패스워드를 보관하는데 어떠한 방법들이 사용되고 있는지 알아보자
단방향 해시 함수
수학적 연산에 의해 데이터를 완전히 암호화된 다른 데이터 (다이제스트) 로 변환하는 것을 말한다. 원본데이터로 다이제스트를 구할수는 있지만 다이제스트로 원본 데이터를 구할수 없다. 이를 단방향 이라고 한다. 따라서 다이제스트인 비밀번호를 DB에 저장해두면 DB가 해킹당하더라도 사용자의 비밀번호는 알 수 없다.
문제점
1. 동일한 문장은 동일한 다이제스트를 갖는다.
SHA-256를 완전히 해독하려면 경우의 수는 2의 256승으로 굉장히 방대하다. 해커들은 해독에 직접 값을 대입하며 다이제스트를 해독하는데 이렇게 해독된 다이제스트 목록을 레인보우 테이블 이라고 한다. 이러한 방식의 해킹을 레인보우 공격이라고 일컫는다.
2. 무차별 대입 공격(브루트포스)
해시함수의 경우 원래 빠른 데이터 검색을 위한 목적으로 설계되었다. 그래서 해시함수를 써도 원문의 다이제스트는 금방 얻어지고 해커 또한 임의의 비밀번호를 무작위로 대입하여 무작위로 다이제스트를 대입해보는것이 가능하다. 따라서 DB에서 탈취한 다이제스트를 해커가 만든 다이제스트와 비교를 해보는 것이다.
하지만 모든 경우의 수를 대입하는 것은 물리적으로 불가능에 가깝고, 해커들은 상징성이 있는 문자들을 위주로 대입해본다고 한다. 따라서 비밀번호는 아무런 상징성이 없는 비밀번호를 만드는 것이 중요하다.
보완방법
1. 해시함수 여러번 수행하기 (키 스트레칭 : Key stretching)
해시함수를 써서 얻은 다이제스트를 또 해시함수를 써서 다른 다이제스트를 얻고.. 이 과정을 N번 거치는 방법을 이용한다. 이 과정은 개발자만 알고 있지만, 설령 해커가 알아냈다고 하더라도 여러번 거치는 시간소모가 해커를 곤란하게 만든다.
이것은 브루트포스를 무력화 하기 위한 방법이다.
2. 솔트(Salt)
말 그대로 비밀번호에 소금을 뿌리는 것이다. 더 정확하게는 비밀번호에 임의의 문자열을 덧붙여서 해시함수를 만드는 것이다. 이 방법을 사용하면 해커가 다이제스트를 알아내고 해당 다이제스트의 원문을 알아내도 사용자의 비밀번호 원문은 알아내기 힘들어 진다. 왜냐하면 다이제스트의 원문은 비밀번호+임의의 문자열 이기 때문이다.
'개발 > 네트워크' 카테고리의 다른 글
[네트워크] http의 GET, POST 비교 (0) | 2023.01.09 |
---|---|
[네트워크] http와 https 의 차이점 (0) | 2023.01.09 |
[네트워크] 브라우저 스토리지란? (Web Storage) (0) | 2023.01.09 |
[네트워크] 세션과 쿠키 (0) | 2023.01.09 |
[네트워크] CORS란 무엇이고 해결 방법은 무엇인가? (0) | 2023.01.09 |