이번 유닛에서는 Spring Security에 대한 학습을 진행했다. 부트캠프를 진행하면서 제일 이해하기도 힘들었고, 어려웠던 유닛이었다. 유닛에 대해 학습하면서 배운 개념들을 정리해보겠다.
HTTPS
-
HTTP + Secure, HTTP 프로토콜 내용을 암호화시킨 것이라고 볼 수 있다.
-
HTTP Secure Socket layer의 약자로 HTTP over SSL(TLS), HTTP over Secure라고 부르기도 한다
-
HTTP 요청을 SSL or TLS라는 알고리즘을 이용해, HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법이다.
-
인증에서 HTTPS 프로토콜을 사용하는 이유는 HTTP보다 상대적으로 안전한 방법이고, 데이터 제공자의 신원을 보장받을 수 있기 때문이다.
- 데이터 제공자의 신원을 확인하고 보장 받는 것이 중요한 이유
- 클라이언트는 데이터 제공자가 제공해준 데이터를 사용할 수 밖에 없다.
- 요청 및 응담을 중간에 가로채는 중간자 공격에 취약하다.
-
암호화
- HTTPS 프로토콜의 특징 중 하나는 암호화된 데이터를 주고 받기 때문에, 중간에 인터넷 요청이 탈취 되더라도 그 내용을 알 수 없다.
-
인증서
- 또 다른 특징 중 하나는 브라우저가 응답과 함께 전달된 인증서 정보를 확인할 수 있다. 브라우저는 인증서에서 해당 인증서를 발급한 CA 정보를 확인하고, CA가 발급한 인증서가 아니라면 결과창에 오류를 띄운다.
- 브라우저는 인증서의 도메인과 데이터를 제공한 제공자의 도메인을 비교할 수 있기 때문에 중간자 공격을 감지하여 보안 위협으로부터 사용자 및 사용자 데이터를 보호할 수 있다.
HTTPS의 특징
인증서(Certificate)
CA (Certificate Authority) : 공인인증서 발급기관
비대칭 키 암호화
- 키 A로 암호화를 하면 키 B로만 복호화가 가능하다.
Hashing
암호화(Encryption)
- 암호화는 일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여 해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 알고리즘을 이용해 정보를 관리하는 과정이다.
해싱(Hashing)
- 어떤 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것
- 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야 한다.
- 최대한 해시 값을 피해야 하며, 모든 값은 고유한 값을 갖는다.
- 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.
Salt
-
암호화해야 하는 값에 어떤 별도의 값을 추가하여 결과를 변형하는 것
- 암호화만 해놓는다면 해시된 결과가 늘 동일하다.
- 원본값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시 값이 반환되어 알고리즘이 노출되더라도 원본 값을 보호할 수 있도록 하는 안정장치
- 기존 : 암호화하려는 값 => 해시값, salt 사용 : 암호화하려는 값 + salt 값 => 해시값
-
주의점
- salt는 유저와 패스워드 별로 유일한 값을 가져야 한다.
- 사용자 계정을 생성, 변경할 때마다 새로운 임의의 salt를 사용해 해싱해야 한다.
- salt는 절대 재사용하지 않는다.
- salt는 DB의 유저 테이블에 같이 저장되어야 한다.
쿠키, 세션, OAuth는 다음 블로그에서 작성하겠습니다.
Reference
-
코드스테이츠 강의자료