단방향 암호화, 양방향 암호화

이제우·2023년 11월 27일
0

단방향 암호화

단방향 암호화는 다시 복호화를 할 수 없는 암호화 방식이다.
다시 복호화를 할 수 없다면 왜 사용하는가 싶었지만 이 단방향 암호화를 주로 사용할 때가 있다.
비밀번호를 DB에 저장할때는 바로 이 단방향 암호화를 사용하는데 이렇게 비밀번호를 관리하면 DB가 털려도 비밀번호 노출에 대해서 안전할 수 있다. 이 암호화 되어 저장된 비밀번호를 비교할 때는 입력받은 비밀번호를 똑같은 방식으로 암호화하여 두 암호화된 비밀번호가 같은지 비교한다.
단방향 암호화는 해시방식을 주로 사용한다.

해시 : 입력된 정보를 고정된 길이의 문자열로 변환하는 방식. 같은 입력을 받으면 항상 같은 값으로 변환하기 때문에 비밀번호가 일치하는지 비교할 수 있다.

양방향 암호화

양방향 암호화는 평문을 암호화하고 암호문을 다시 복호화 할 수 있는 암호화 방식이다.
주로 전자서명과 같이 재사용성이 있는 정보는 암호화와 복호화가 둘다 이루어져야하기 때문에 양방향 암호화를 사용하며 보통 대칭키와 비대칭 키를 사용한다.

대칭키 : 복호화 키와 암호화 키가 같기 때문에 처리속도가 빠르고 간단하지만 키를 안전하게 유지하기 어려움


비대칭키 : 복호와 키와 암호화 키가 다르기 때문에 안전하게 키가 보관될 수 있음


대칭 키로 정보를 암호화 한다음 비대칭 키대칭 키를 암호화해서 보내면
상대방은 비대칭 키대칭 키를 복호화 한다음 복호화된 대칭 키로 정보를 다시 복호화 하여 사용한다. 이를 "하이브리드 암호화"라고 한다.

전자서명

전자서명은 데이터 무결성을 확인하는 방법 중 하나이며 개인키로 암호화를 하고 공개키로 복호화를 한다. 중요한 데이터는 이 방법으로 암호화를 하면 안되겠지만 이 방법은 데이터를 보낸 송신자를 증명할 수 있게 해준다. 먼저 송신자가 원본 문서해시 값을 생성한 뒤 이 해시 값을 개인키로 암호화하여 전자서명을 생성한다. 그 후 송신자는 수신자에게 원본 문서, 전자서명, 공개 키를 전송한다. 수신자는 원본 문서해시 값을 생성하고, 전자서명공개 키로 복호화하여 두 해시 값을 비교해 데이터의 무결성을 검증할 수 있게 된다.


bcrypt

아래 코드의 의미

const saltRounds = 10;
const hashedPassword = await bcrypt.hash(password, saltRounds);

const saltRounds = 10;는 비밀번호를 해싱할 반복 횟수이다. 횟수가 많아질 수록 더 많은 연산을 하여 해시값이 더 안전해지지만 계산에 드는 비용이 증가하여 적절한 횟수를 입력해야한다. 보통 10회를 사용한다.

const hashedPassword = await bcrypt.hash(password, saltRounds);는 솔트값을 자동으로 생성하여 비밀번호와 합치는 과정을 saltRounds의 횟수 만큼 반복한다. 반복하며 생성된 솔트값은 해시값과 함께 저장되어 이 후 검증에 사용된다.

profile
게으른 사람 중에 제일 부지런하게 사는 사람이 꿈

0개의 댓글