암호화 기초

Jun 2k (Jun2)·2023년 9월 21일

CS공부

목록 보기
3/8
post-thumbnail

암호화

평문을 해독할 수 없는 암호문으로 변환하는 것
단방향(해싱)과 양방향 암호화로 나뉨

암호화
출처: https://raonctf.com/essential/study/web/cryptography

단방향 암호화

해시 알고리즘을 이용하여 평문을 복호화 할 수 없는 형태로 암호화
MD5와 SHA 알고리즘이 있음
사용자 비밀번호와 같은 경우 자주 사용
MD5, SHA-0, SHA-1은 해시 충돌 발생 취약, 사용 지양

단방향 암호화 주의점

복호화가 불가능하지만 Rainbow Table을 통해 원문 조회 가능

Rainbow Table

평문과 해시 함수로 만든 문자열을 모두 저장시켜 놓은 표

그러므로 만약 암호화된 데이터를 탈취당하더라도 원문을 알아낼 수 없도록 조치가 필요
=> Salt, Key stretching

Salt

평문에 임의로 문자열을 추가하여 암호화
소금을 곁들여 먹는 거 같다고 해서 Salt
Salt는 128bit 이상으로 만들길 권장
사용자마다 다른 Salt를 사용하는 것이 안전

Key Stretching

해시를 여러 번 반복해서 원문을 알기 힘들게 만듬
일반적인 시스템에서 0.2초 이상 반복하는 게 안전

Salt & Key stretching 이용 알고리즘

이미 검증받은 알고리즘을 사용하는 것이 안전

PBKDF2

NIST(미국표준기술연구소)에서 승인된 알고리즘
DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)

bcrypt

비밀번호 저장을 목적
OpenBSD에서 기본으로 사용하고 있는 알고리즘


양방향 암호화

평문을 복호화 할 수 있는 형태로 암호화
대칭키(AES), 비대칭키(RSA) 알고리즘

대칭키 암호 알고리즘

AES가 대표적
같은 키를 사용하여 암호화, 복호화 모두 가능

비대칭키 암호 알고리즘

RSA가 대표적
공개키와 개인키 2개가 존재
RSA는 소인수 분해를 기반으로 만들어진 알고리즘


실제 복호화 기술 (추측)

1password 기반일 가능성? (더 찾아보기)


JavaScript에서 암호화

crypto-js

https://github.com/brix/crypto-js

bcrypt는 별도의 라이브러리 사용

https://github.com/kelektiv/node.bcrypt.js



😅 해당 내용은 공부하면서 정리한 글입니다. 틀린 부분이나 오해하고 있는 부분이 있다면 피드백 부탁드립니다.

관련 레퍼런스

암호화 - IBM 홈페이지

profile
유리프트 프론트엔드

0개의 댓글