TIL(47)인증/보안(HTTPS)

codedot·2021년 11월 22일
0

인증/보안(HTTPS, CA, Hashing, Salt) ✍🏻

인증/보안(HTTPS)📍

HTTPS(HTTP + Secure) : HTTP 프로토콜 내욜을 암호화 하여 보안성이 추가되었다.
HTTP 의 경우 요청에 대한 내용을 암호화 되지 않기 때문에 개인정보 등에 대한 중요한 내용이 노출되어 보안에 취약하다.
하지만 HTTPS의 경우 내용을 암호화 하기때문에 보안에 용이하다.

인증서(Certificate)

  • 데이터 제공자 신원 보장
  • 도메인 종속

CA(Certificate Authority)

  • 공인 인증서 발급 기관
  • 비대칭 키 암호화
    • 공개된 암호화 키가 존재하고 비밀 키를 이용해 복호화 가능(통신초창기에 주로 사용되며, 매번 사용하지는 않음)
  • 안전한 서버를 사용할 수 있게 사용자를 유도 한다.

인증서 생성 📌

로컬을 인증된 발급기관으로 추가해야 한다.

$ mkcert -install

localhost로 대표되는 로컬 환경에 대한 인증서를 만들려면 다음 명령어를 입력해야 한다.

$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1

이제 옵션으로 추가한 localhost, 127.0.0.1(IPv4), ::1(IPv6)에서 사용할 수 있는 인증서가 완성되었습니다. cert.pem, key.pem 이라는 파일이 생성된 것을 확인할 수 있다.

여기서 발급받은 key와 cert를 계속 활용하게 된다. 저장 경로를 반드시 확인!!
인증서는 공개키, 그리고 인증기관의 서명을 포함하고 있으므로 공개되어도 상관이 없지만, key.pem의 경우 개인 키이므로 git에 커밋하지 않고, 암호처럼 다루어야 한다.

Hashing 📌

임의의 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것

  • 모든 값에 대해 해시 값을 계산하는데 오래걸리지 않아야 한다.
  • 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.
  • 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.

Salt 📌

암호화해야 하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것

  • 암호화만 해놓는다면 해시된 결과가 늘 동일 해시된 값과 원래 값을 테이블(레인보우 테이블)로 만들어서 decoding 해버리는 경우도 생긴다.
  • 원본값에 임의로 약속된 '별도의 문자열'을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전 장치
  • 기존 : (암호화 하려는 값) ⇒ (hash 값) Salt 사용 : (암호화 하려는 값) + (Salt용 값) ⇒ (hash 값)

Salt 사용 시 주의 사항

  • Salt는 유저와 패스워드 별로 유일한 값을 가져야 한다.
  • 사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 Salt를 사용해서 해싱해야 한다.
  • Salt는 절대 재사용하지 않는다.
  • Salt는 DB의 유저 테이블에 같이 저장되어야 한다.
profile
Loding...

0개의 댓글