[포스코x코딩온] 웹개발자 풀스택 과정 7주차 | 암호화

구준희·2023년 8월 19일
0

[포스코x코딩온]교육

목록 보기
24/40
post-thumbnail
post-custom-banner

암호화

암호화 종류

단방향 알고리즘

  • 단방향 알고리즘은 암호화는 수행하지만 절대로 복호화가 불가능한 알고리즘을 의미
  • 암호화 가능, 복호화 불가

양방향 알고리즘

  • 양방향 알고리즘은 암호화된 암호문을 복호화 할 수 있는 알고리즘을 의미
  • 암호화 가능, 복호화 가능

대칭키(비공개키) 방식

  • 특징 : 암복호화에 서로 동일한 키가 사용되는 암호화 방식, 그래서 키를 비공개한다.
  • 장점 : 속도가 빠르다.
  • 단점 : 키 배송 위험성 존재하여 송신 측에서 수신측에 암호 키를 전달하는 과정에서 노출우려가 있다.
  • 대표 : DES, AES

비대칭키(공개키) 방식

  • 특징 : 암복호화에 서로 다른 키가 사용되는 암호화 방식, 하나의 키는 공개키로 사용
  • 장점 : 키 배송의 문제를 근본적으로 차단하여 안전성이 높다.
  • 단점 : 대칭키(비공개키)방식에 비해서 느리다.
  • 대표 : RSA
-암호화복호화암호화방식
단방향가능불가능Hash
양방향가능가능대칭키(비공개키)
비대칭키(공개키)

해시(Hash)

  • 해시(Hash) : 해시 함수에 의해 얻어지는 값
  • 해시 함수(Hash Function) = 해시알고리즘
    • 키(Key) : 매핑 전 원래 데이터 값
    • 해시 값(hash value) : 매핑 후 데이터 값
    • 해싱(hashing) : 매핑하는 과정

Bcrypt 암호화

  • 비밀번호를 암호화하는 알고리즘 중 하나
  • Blowfish 암호를 기반으로 설계된 암호화 함수
    blowfish: 브루스 슈나이어가 설계한 키(Key) 방식의 대칭형 블록 암호
  • 현재까지도 사용 중인 가장 강력한 매커니즘임과 동시에 해싱이 느리고 비용이 많이듬
  • 강력한 보안이 필요할 때 적합
npm install bcrypt // 모듈 설치 
const bcrypt = require('bcrypt') //모듈 불러오기
const salt = 10;	// 상수로 설정, 보통 10 or 11 로 함

암호화

const bcryptPassword = (password)=>{
  return bcrypt.hashSync(password, saltNumber)
}
// hashSync : 비동기
// hash : 동기

복호화

const comparePassword = (password, dbpassword)=>{
	return bcrypt.compareSync(password, dbpassword)
}
// compareSync : 비동기
// compare : 동기
// password : 검증할 비밀번호
// dbpassword : 암호화된 비밀번호

pbkdf2 암호화

  • 비밀번호 기반 키 도출 함수(PBKDF : Password-Based Key Derivation Function) : 버퍼를 반환함(2진수로 된 애들)
  • 주로 사용자 비밀번호를 저장할 때 사용
const salt = crypto.randomBytes(16).toString('base64') //랜덤 값으로 솔트 생성
const iterations = 100;	//반복횟수 설정
const keylen = 64; // 생성할 키의 길이
const digest = 'sha512' // 해시 알고리즘

const createpbkdf = (password) =>{
  return crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('base64');
};
// 비밀번호, 솔트값, 반복횟수, 키의길이, 알고리즘 순서로 들어감

검증

  • 단방향 알로리즘이기 때문에 복호화가 불가능하기 때문에 입력한 값을 다시 암호화해서 비교함
const verifyPassword = (password, salt, dbpassword) =>{
  const compare = crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('base64');
  if(compare == dbPassword)
    return true;
  return false;
  // 이번에 암호화한 값(comapre)이랑 원래 암호화 되어있는 값(dbpassword)이랑
  // 비교해서 같으면 true반환, 틀리면 false를 반환
profile
꾸준히합니다.
post-custom-banner

0개의 댓글