보안 | bcrypt 암호화 복호화 적용법

|

개요

우리는 보안성에 어긋나지 않도록 프로그래밍 작업을 할 필요가 있습니다. 비밀번호는 반드시 암호화 되어야 하며, 이 것을 지키지 않을 경우에는 개인정보보호법 29조(안전조치) 를 위반하는 일이기 때문에 조심해야 합니다.

워드프레스 암호화 업그레이드를 원하시면 플러그인 암호화 변경하기 를 참조해주세요

안정성 있는 bcrypt 소개

image 73
보안 | bcrypt 암호화 복호화 적용법 3

우리는 비크립트(bcrypt) 라는 암호화 해싱 기능을 사용합니다. 이는 1993년 브루스 슈나이어가 설계한 대칭형 블록 암호를 기반으로 두고 있습니다. 슈나이어는 이 알고리즘을 두고 퍼블릭 도메인에 속하며 누구든지 자유롭게 사용할 수 있다는 말을 언급하였고, 이 방식을 통해 bcrypt 는 1999년 공개되었습니다.

이 bcrypt 해시는 PHP 5.5 이상부터 들어오게 되었습니다. password_hash() 함수를 통해 암호화 할 수 있고, password_verify()함수를 통해 비밀번호 대조를 할 수 있습니다.

암호화

image 74
보안 | bcrypt 암호화 복호화 적용법 4
echo password_hash('비밀번호', PASSWORD_DEFAULT);

PASSWORD_DEFAULT 는 bycrypt 알고리즘을 사용합니다. 암호화 된 코드 앞에는 $2y$10$ 라는 값이 고정적으로 붙습니다.

$salt = [
  'cost' => 11
]
echo password_hash('비밀번호', PASSWORD_BCRYPT, $salt);

두번째 암호화 방법입니다. PASSWORD_DEFAULT 와는 다르게 $salt 를 통해 암호화의 난이도를 조정합니다. 기본값은 10이며 많이 사용하면 서버에 부하가 생길 수 있습니다.

그 외로도 PASSWORD_ARGON2IPASSWORD_ARGON2ID 등의 상수를 선택하여 비밀번호를 생성할 수 있습니다.

암호 대조

$hash = '$2y$10$qntuHt9GUH3j.UEVBj5f8OpjMEcYNh4HOqWrdgl9CshWdBZp..8vO';

if (password_verify('비밀번호', $hash)) {
    echo '비밀번호 맞음';
} else {
    echo '비밀번호 틀림.';
}

비밀번호의 값을 대조하는 방법입니다. 현재 $hash 값에 들어있는 암호는 ‘비밀번호’ 로 만들었기에 바로 true 값을 출력합니다.

node.js 활용방법

npm install bcrypt

const bcrypt = require('bcrypt');

// 해시
const PW = '비밀번호'
bcrypt.hash(PW, 10, (err, encryptedPW) => {
  // 콜백
})

// 해시 싱크
const PW = '비밀번호';
const encryptedPW = bcrypt.hashSync(PW, 10); // 비밀번호 암호화

bcrypt.compare(PW , encryptedPW, (err, same) => {
  console.log(open);
})

const PW = '비밀번호';
const encryptedPW = bcrypt.hashSync(PW, 10);

const same = bcrypt.compareSync(PW, encryptedPW);
console.log(open); // same = true

참조

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

클릭하여 복사