# 해시 암호화와 AES(Advanced Encryption Standard) 암호화
1. **용도**:
- **해시 암호화**: 주로 데이터 무결성 검증을 위해 사용됩니다. 동일한 입력에 대해 항상 동일한 고정 길이 해시 값을 생성하며, 주로 비밀번호 저장, 데이터 무결성 확인 등에 사용됩니다.
- **AES 암호화**: 데이터의 기밀성을 유지하기 위해 사용됩니다. 데이터를 암호화하면 오직 허가받은 사용자만 해당 데이터를 볼 수 있으며, 주로 데이터 보호에 사용됩니다.
2. **출력**:
- **해시 암호화**: 항상 동일한 입력에 대해 동일한 해시 값이 생성됩니다. 즉, 해싱은 일반적으로 단방향 암호화입니다. 원래 데이터를 복원할 수 없습니다.
- **AES 암호화**: 입력 데이터가 암호화되어 암호문이 생성됩니다. 원래 데이터는 키를 사용하여 복호화할 수 있으므로 양방향 암호화입니다.
3. **출력 길이**:
- **해시 암호화**: 고정된 길이의 출력을 생성합니다. 예를 들어, MD5는 128비트(16바이트) 해시 값을 생성하며, SHA-256은 256비트(32바이트) 해시 값을 생성합니다.
- **AES 암호화**: AES는 대개 128, 192, 또는 256비트 키를 사용하여 데이터를 암호화합니다. 그 결과, 출력 암호문의 길이는 입력 데이터와는 관계가 없으며, 입력 데이터와 동일한 길이를 가지지 않습니다.
4. **복호화 가능성**:
- **해시 암호화**: 일방향 암호화이므로 원래 데이터를 복원할 수 없습니다. 주로 비밀번호 저장 등에 사용되며, 비밀번호를 비교하거나 데이터 무결성을 확인하는 데 사용됩니다.
- **AES 암호화**: 양방향 암호화이므로 암호화된 데이터를 복호화하여 원래 데이터를 복원할 수 있습니다. 데이터의 기밀성을 유지하기 위해 사용됩니다.
5. **보안 강도**:
- **해시 암호화**: 일반적으로 해시 충돌 공격에 취약합니다. 즉, 두 다른 입력이 동일한 해시 값을 생성할 수 있습니다. 따라서 안전한 비밀번호 저장을 위해서는 솔트(salt)와 같은 추가 보안 기법을 사용해야 합니다.
- **AES 암호화**: AES는 강력한 대칭 암호화 알고리즘으로, 적절한 키 관리 및 구현에 따라 안전한 데이터 보호를 제공합니다.
요약하면, 해시 암호화는 데이터 무결성을 검증하고 비밀번호 저장과 같은 일반적인 용도에 사용되며, 원래 데이터를 복원할 수 없습니다. 반면에 AES 암호화는 데이터의 기밀성을 유지하고 양방향 암호화를 제공하여 데이터 보호에 사용됩니다.
* 비밀번호를 AES로 암호화하여 저장하는 것은 일반적으로 권장되지 않습니다. 이유는 다음과 같습니다:
1. **단방향 해시의 필요성**:
비밀번호를 저장할 때는 보통 단방향 해시 함수를 사용하는 것이 더 안전합니다. 단방향 해시 함수는 원래 비밀번호를 해시 값으로 변환하는 데 사용되며, 이 변환은 일방향이므로 해시 값을 다시 원래 비밀번호로 복원할 수 없습니다.
2. **키 관리 어려움**:
AES와 같은 양방향 암호화는 키를 관리해야 합니다. 이 키를 안전하게 저장하고 관리하는 것은 복잡하고 위험한 과정일 수 있습니다. 만약 암호화 키가 유출된다면 모든 비밀번호가 노출될 수 있습니다.
3. **성능 문제**:
암호화 및 복호화 작업은 비밀번호 확인 시에 추가적인 처리를 필요로 합니다. 이로 인해 시스템의 성능이 저하될 수 있습니다.
4. **비밀번호 변경 어려움**:
암호화된 비밀번호를 저장한 경우, 사용자가 비밀번호를 변경할 때 추가 작업이 필요합니다. 사용자가 새로운 비밀번호를 제공하면 해당 비밀번호를 암호화해야 하며, 저장된 암호화된 비밀번호를 비교해야 합니다.
대신에 비밀번호를 안전하게 저장하려면 다음과 같은 접근 방식을 사용하는 것이 권장됩니다:
1. **솔트와 해시**:
사용자마다 고유한 솔트(salt)를 생성하고, 이 솔트와 함께 비밀번호를 해시 함수(예: BCrypt, Argon2)를 사용하여 저장합니다. 솔트는 각 비밀번호에 고유한 값을 부여하여 레인보우 테이블 공격을 방지합니다.
2. **비밀번호 재설정**:
사용자가 비밀번호를 잊어버린 경우 또는 비밀번호를 변경한 경우, 안전한 방법으로 비밀번호를 재설정하는 메커니즘을 제공해야 합니다.
3. **키 관리**:
시스템에서 사용하는 모든 키와 암호화된 데이터를 안전하게 관리하고 보호해야 합니다.
비밀번호 관리와 보안은 중요한 주제이며, 암호화를 사용하는 방식을 신중하게 고려해야 합니다. 보안 전문가와 함께 비밀번호 보안 및 저장에 관한 최선의 접근 방식을 결정하는 것이 좋습니다.
'Etc' 카테고리의 다른 글
프로세스(Process)와 스레드(Thread) 비교 (0) | 2023.10.27 |
---|---|
직렬화(Serialization)에 관해 (0) | 2023.10.27 |
ODBC (0) | 2023.09.27 |
제조 및 운영 관련 용어 정리 (0) | 2023.09.26 |
Notepad++(노트패드) 활용 (0) | 2023.09.20 |