사용자 패스워드를 안전하게 전송하고 보관하는 것은 보안 및 개인 정보 보호에 관련된 중요한 주제입니다.
이러한 방법들에는 아래와 같은 방법들이 있습니다.
안전한 전송 (Safe Transmission):
HTTPS 사용: 사용자 패스워드를 전송할 때는 항상 HTTPS(SSL/TLS)를 사용하여 암호화된 통신을 제공해야 합니다. 이렬과 HTTP 대신 HTTPS를 사용하면 데이터가 중간에서 가로채지지 않도록 보호됩니다.
안전한 저장 (Safe Storage):
해싱 (Hashing): 사용자 패스워드를 해싱하여 저장합니다. 해싱은 패스워드를 일방향 암호화하여 저장하고, 복호화할 수 없도록 하는 프로세스입니다. 일반적으로 강력한 해시 함수(예: bcrypt, scrypt, Argon2)를 사용하며, 각 패스워드에 고유한 "솔트(Salt)"를 추가하여 레인보우 테이블 공격을 방지합니다.
솔트(Salt): 솔트는 각 패스워드에 무작위 문자열을 추가하는데, 같은 패스워드라도 다른 솔트를 사용하면 다른 해시 결과가 생성됩니다. 이렇게 하면 레인보우 테이블 공격을 효과적으로 방지할 수 있습니다.
암호화에는 두가지 종류의 암호화가 존재합니다. 하나는 양뱡향 암호화이고 다른 하나는 단방향 암호화입니다.
이 두가지의 가장 큰 차이점은 복호화가 가능하다는 것입니다.
양방향 암호화
양방향 암호화는 데이터를 암호화하고 복호화하기 위해 동일한 키를 사용하므로, 이 키가 유출되면 암호화된 데이터가 위험에 노출됩니다. 그렇기 때문에 대칭키 관리가 중요합니다.
해커가 암호화된 데이터와 키를 모두 획득하면 데이터를 해독할 수 있을 가능성이 있습니다.
단방향 암호화
단방향 암호화는 데이터의 무결성과 인증을 보호하기 위해 사용됩니다.
공개 키와 비밀 키 쌍을 사용하며, 공개 키로는 암호화만 가능하고 복호화는 비밀 키로만 가능합니다.
공개 키를 사용하여 데이터를 암호화하면, 비밀 키로만 해독할 수 있으므로, 해커가 공개 키를 가지고 있더라도 데이터를 해독할 수 없습니다. 데이터 무결성이 중요한 경우, 단방향 암호화가 더 안전합니다.
bcrypt
우리가 흔히 사용하는 bcrypt는 단방향 암호화 알고리즘입니다. 따라서 bcrypt는 주로 데이터의 무결성과 비밀성을 보호하기 위해 사용되며, 주로 사용자 패스워드의 안전한 저장에 사용됩니다.
bcrypt는 패스워드와 같은 민감한 정보를 안전하게 저장하는 데 효과적인 도구로 널리 사용됩니다. 이 알고리즘은 패스워드를 해싱하고 솔트(salt)와 함께 저장합니다.
솔트는 고유한 값으로, 같은 패스워드를 가진 사용자에 대해 각각 다른 해시 값을 생성하므로 레인보우 테이블 공격과 같은 공격을 방지합니다.
bcrypt는 해싱 함수를 반복적으로 적용하여 공격자가 빠르게 패스워드를 해독하는 것을 어렵게 만듭니다.
이를 통해 브루트 포스(대입 공격) 및 사전 공격과 같은 공격을 어렵게 합니다.
인증 방법 (Authentication):
2단계 인증 (Two-Factor Authentication, 2FA): 사용자가 패스워드 외에 추가적인 인증 수단을 사용하도록 강제합니다. 이는 보안을 더 강화합니다.
비밀번호 정책 (Password Policies):
강력한 비밀번호 정책을 사용하십시오. 사용자들에게 복잡하고 긴 패스워드를 요구하거나 정기적으로 패스워드를 변경하도록 권장합니다.
'cs 공부' 카테고리의 다른 글
| 깊은 복사와 얕은 복사의 차이는 무엇이고 JS에서 각각을 구현하는 방법은 어떻게 되는지 설명해주실 수 있을까요? (0) | 2023.10.16 |
|---|---|
| 모든 요소에 인덱스를 걸지 않는 이유는 무엇일까요? (0) | 2023.10.16 |
| Promise란 무엇인지 설명해주실 수 있을까요? (0) | 2023.10.15 |
| var, let, const 에 대해 설명해주실 수 있을까요? (0) | 2023.10.15 |
| Node.js의 이벤트 루프란 무엇이고 왜 필요하며 어떻게 작동하는지 아는 만큼 설명해주실 수 있을까요? (0) | 2023.10.15 |