PHP 기반의 웹 사이트에서는 사용자 아이디와 비밀번호를 보호하기 위해 여러 가지 암호화 방식을 사용합니다. 특히 비밀번호의 경우, 단순히 암호화하는 것보다 해싱(hash)하는 것이 일반적입니다.
1. **Hashing**: 해싱은 원본 데이터를 고정 길이의 문자열로 변환하는 일방향 함수입니다. 이는 원본 데이터를 복구할 수 없기 때문에, 비밀번호가 노출되더라도 실제 비밀번호를 알아내기 어렵습니다.
2. **Salt**: 솔팅은 해시 충돌을 방지하고 레인보우 테이블(rainbow table) 공격을 막기 위해 사용됩니다. 솔트는 임의의 데이터 조각으로, 원래 비밀번호에 추가하여 해싱합니다. 이렇게 하면 같은 비밀번호라도 다른 솔트가 적용되면 다른 해시 값을 생성하므로 보안성이 향상됩니다.
3. **Pepper**: 패퍼(pepper)는 추가적인 보안 층을 제공하는 또 다른 요소입니다. 패퍼는 솔트와 유사하지만, 보통 코드 내부나 별도의 설정 파일에 저장되며 모든 비밀번호에 대해 동일하게 적용됩니다.
PHP 5.5 이상에서는 `password_hash()` 및 `password_verify()` 함수를 제공하여 위 프로세스를 간단하게 만들어 줍니다. `password_hash()` 함수는 자동으로 솔트를 생성하고, 해당 솔트와 함께 결과 해시 값을 반환합니다.
비록 PHP가 기본적으로 제공하는 함수들이 있지만, 최신 알고리즘이나 라이브러리를 사용하여 최대한 강력한 보안을 유지하는 것이 중요합니다.
워드프레스는 사용자 비밀번호의 보안을 위해 솔트와 함께 MD5 해싱 알고리즘을 사용합니다. 워드프레스는 먼저 임의의 문자열인 '솔트'를 생성하고, 이 솔트를 비밀번호에 추가한 후 결과를 MD5 해싱 알고리즘에 넣어 최종적인 해시 값을 생성합니다.
그러나 단순한 MD5 해싱은 오늘날 컴퓨터 파워로 인해 더 이상 안전하지 않다는 것이 일반적으로 받아들여지고 있습니다. 따라서 워드프레스는 PHPass라는 라이브러리를 사용하여 비밀번호에 복잡한 '스트레칭'과 '솔팅'을 추가로 적용합니다. 이것은 각각의 비밀번호가 복잡하게 변형되며, 동일한 비밀번호라도 다른 해시 값을 가지도록 만듭니다.
PHPass 라이브러리가 적용된 워드프레스의 방식은 다음과 같습니다:
1. 사용자가 원래 입력한 비밀번호를 가져옵니다.
2. 솔트(salt)를 추가합니다.
3. 해당 데이터에 여러 번(기본값으로 8회, 그러나 변경 가능) MD5 해싱을 적용하는 과정을 반복합니다.
4. 마지막으로 결과값(해시 값)이 데이터베이스에 저장됩니다.
사용자가 로그인할 때, 입력된 비밀번호는 동일한 과정을 거친 후 데이터베이스에서 저장된 값과 대조됩니다.
웹사이트 보안 향상 및 최신 보안 기준 충족을 위해, 웹사이트 관리자들은 항상 최신 버전의 워드프레스와 플러그인들을 유지해야됩니다.
그누보드(Gnuboard)는 한국에서 널리 사용되는 오픈 소스 웹 게시판 소프트웨어입니다. 그누보드에서 비밀번호 암호화를 위해 사용하는 방식은 다음과 같습니다:
1. **MD5 해싱**: 기본적으로 그누보드는 비밀번호를 저장하기 전에 MD5 해싱 알고리즘을 사용하여 비밀번호를 암호화합니다. MD5는 메시지-다이제스트 알고리즘 5(Message-Digest Algorithm 5)의 줄임말로, 임의의 길이의 데이터를 입력 받아 고정된 길이(128비트)의 해시값을 출력하는 함수입니다.
2. **솔트(Salt)**: 보안 강화를 위해, 그누보드는 '솔트'라 불리우는 랜덤 문자열을 생성하고 이것을 원본 비밀번호에 추가한 후, 그 결과를 MD5로 다시 해싱합니다.
3. **비밀번호 확인**: 로그인 시, 사용자가 입력한 비밀번호도 동일한 과정(MD5 해싱 및 솔팅)을 거쳐 데이터베이스에 저장된 값과 비교됩니다.
그러나 MD5가 현재 컴퓨터 파워와 함께 발전된 레인보우 테이블 공격 등으로 인해 안전하지 않다고 여겨지므로, 개선된 보안 방식을 적용하는 것이 좋습니다. 예를 들어 bcrypt나 scrypt 같은 최신 해싱 알고리즘은 '작업 요소(work factor)' 또는 '비용(cost)' 설정을 통해 해싱 복잡성을 조절할 수 있어서 보안성이 향상됩니다.
2kat님의 댓글
2kat 아이피 (220.♡.000.000) 작성일?