서명과 암호화: 비밀키 및 공개키 방식
디지털 통신에서 데이터의 안전한 전송과 인증은 필수적입니다. 이를 위해 서명과 암호화라는 두 가지 주요 기술이 사용됩니다. 이 글에서는 서명과 암호화를 비밀키(대칭키)와 공개키(비대칭키) 방식으로 나누어 상세히 설명하겠습니다.
1. 서명
서명은 메시지의 출처를 확인하고 데이터의 무결성을 보장하는 기술입니다.
암호화랑 햇갈려서 jwt 토큰에 실린 페이로드를 지켜줄 것이라고 오해했지만
공부하면서 오해가 풀렸다
단순히 이 데이터가 변조된 것인지 확인하는 용도이다
1.1 비밀키 방식
- 구성: 송신자는 비밀키를 사용하여 메시지에 서명을 합니다.
- 과정:
- 메시지를 해시 함수를 통해 해시값으로 변환합니다.
- 해시값을 비밀키로 암호화하여 서명합니다.
- 메시지와 서명을 함께 전송합니다.
- 검증:
- 수신자는 송신자의 비밀키가 아닌 공개키를 사용하여 서명을 검증합니다.
- 해시값을 다시 생성한 후, 서명된 해시값과 비교하여 메시지가 변조되지 않았는지 확인합니다.
- 장점: 구현이 간단하고, 속도가 빠릅니다.
- 단점: 비밀키가 유출될 경우, 데이터의 신뢰성이 떨어집니다.
1.2 공개키 방식
- 구성: 송신자는 자신의 개인키를 사용하여 메시지에 서명을 합니다.
- 과정:
- 메시지를 해시 함수를 통해 해시값으로 변환합니다.
- 해시값을 개인키로 암호화하여 서명합니다.
- 메시지와 서명을 함께 전송합니다.
- 검증:
- 수신자는 송신자의 공개키를 사용하여 서명을 검증합니다.
- 해시값을 다시 생성한 후, 서명된 해시값과 비교하여 메시지가 변조되지 않았는지 확인합니다.
- 장점: 공개키를 통해 누구나 서명을 검증할 수 있어, 출처 확인이 용이합니다.
- 단점: 개인키가 유출될 경우, 서명의 신뢰성이 상실됩니다
1. 키 쌍 생성- 송신자: 공개키와 개인키 쌍을 생성합니다.
- 수신자: 자신의 공개키와 개인키 쌍을 생성합니다.
- 송신자 → 수신자: 송신자는 자신의 공개키를 수신자에게 전송합니다.
- 수신자 → 송신자: 수신자는 자신의 공개키를 송신자에게 전송합니다.
- 송신자:
- 메시지를 준비합니다.
- 메시지에 대한 해시값을 생성합니다.
- 해시값을 개인키로 서명합니다.
- 원래 메시지와 서명을 함께 수신자에게 전송합니다.
- 수신자:
- 송신자로부터 메시지와 서명을 수신합니다.
- 수신한 메시지에 대해 해시값을 생성합니다.
- 송신자의 공개키를 사용하여 서명을 검증합니다.
- 서명 검증 결과에 따라 메시지의 출처와 무결성을 확인합니다.
- 수신자:
- 응답 메시지를 준비합니다.
- 응답 메시지에 대한 해시값을 생성합니다.
- 해시값을 자신의 개인키로 서명합니다.
- 송신자의 공개키를 사용하여 응답 메시지를 암호화한 후 송신자에게 전송합니다.
- 송신자:
- 수신자로부터 응답 메시지와 서명을 수신합니다.
- 수신한 응답 메시지에 대해 해시값을 생성합니다.
- 수신자의 공개키를 사용하여 서명을 검증합니다.
- 서명 검증 결과에 따라 응답 메시지의 출처와 무결성을 확인합니다.
2. 암호화
암호화는 데이터를 보호하기 위해 사용되는 기술로, 정보의 기밀성을 유지하는 데 필수적입니다.
2.1 비밀키 방식
- 구성: 송신자와 수신자는 동일한 비밀키를 사용하여 데이터를 암호화하고 복호화합니다.
- 과정:
- 송신자는 비밀키를 사용하여 데이터를 암호화합니다.
- 암호화된 데이터를 수신자에게 전송합니다.
- 수신자는 동일한 비밀키를 사용하여 암호화된 데이터를 복호화합니다.
- 장점: 처리 속도가 빠르고, 구현이 간단합니다.
- 단점: 키 분배 및 관리의 어려움이 있으며, 비밀키가 유출될 경우 보안성이 떨어집니다.
2.2 공개키 방식
- 구성: 송신자는 수신자의 공개키를 사용하여 데이터를 암호화하고, 수신자는 자신의 개인키로 복호화합니다.
- 과정:
- 송신자는 수신자의 공개키를 사용하여 데이터를 암호화합니다.
- 암호화된 데이터를 수신자에게 전송합니다.
- 수신자는 자신의 개인키를 사용하여 암호화된 데이터를 복호화합니다.
- 장점: 키 분배가 용이하고, 공개키를 자유롭게 배포할 수 있어 안전합니다.
- 단점: 처리 속도가 느리고, 키 관리가 복잡할 수 있습니다.
공개키 암호화 과정- 키 쌍 생성:
- 당신(수신자): 공개키와 개인키 쌍을 생성합니다.
- 상대방(송신자): 공개키와 개인키 쌍을 생성합니다.
- 공개키 공유:
- 당신은 자신의 공개키를 상대방에게 전달합니다.
- 상대방은 자신의 공개키를 당신에게 전달합니다.
- 메시지 전송:
- 상대방: 당신의 공개키를 사용하여 메시지를 암호화합니다. 이렇게 암호화된 메시지는 오직 당신의 개인키로만 복호화할 수 있습니다.
- 상대방은 암호화된 메시지를 당신에게 전송합니다.
- 메시지 수신 및 복호화:
- 당신: 상대방으로부터 암호화된 메시지를 수신합니다.
- 당신은 자신의 개인키를 사용하여 암호화된 메시지를 복호화하여 원래의 메시지를 확인합니다.
- 키 쌍 생성:
3. 공개키 암호화의 구성 및 과정
3.1 공개키와 개인키의 기본 개념
공개키 암호화는 비대칭키 암호화의 일종으로, 두 개의 키를 사용하여 데이터를 암호화하고 복호화합니다.
- 공개키: 누구나 사용할 수 있는 키로, 자유롭게 배포할 수 있습니다. 다른 사용자가 이 키를 사용하여 메시지를 암호화할 수 있습니다.
- 개인키: 비밀로 유지해야 하는 키로, 공개키로 암호화된 메시지를 복호화하는 데 사용됩니다. 이 키는 절대로 외부에 공개되어서는 안 됩니다.
3.2 키 쌍 생성
키 쌍은 암호화 시스템의 기본 구성 요소로, 공개키와 개인키를 생성하는 과정은 다음과 같습니다:
- 키 생성 알고리즘 선택: RSA, ECDSA 등의 알고리즘을 선택합니다. 각 알고리즘은 서로 다른 방식으로 키를 생성합니다.
- 키 생성: 선택한 알고리즘을 사용하여 공개키와 개인키를 생성합니다.
- RSA의 경우, 두 개의 큰 소수 ( p )와 ( q )를 곱하여 ( n )을 만들고, ( n )과 함께 공개키를 형성합니다. 개인키는 ( n )과 함께 비밀로 유지됩니다.
- ECDSA는 타원 곡선을 사용하여 더 짧은 키로도 같은 수준의 보안을 제공합니다.
3.3 공개키 암호화의 과정
공개키 암호화의 과정은 다음과 같습니다:
메시지 암호화
- 메시지 준비: 송신자는 암호화할 메시지를 준비합니다.
- 공개키 사용: 송신자는 수신자의 공개키를 사용하여 메시지를 암호화합니다.
메시지 전송
- 전송: 암호화된 메시지를 수신자에게 전송합니다. 이 메시지는 수신자의 공개키로 암호화되어 있어, 다른 사람은 내용을 알 수 없습니다.
암호화된 메시지 = Encrypt(메시지, 수신자의 공개키)
메시지 복호화
- 복호화: 수신자는 자신의 개인키를 사용하여 암호화된 메시지를 복호화합니다.
복호화된 메시지 = Decrypt(암호화된 메시지, 수신자의 개인키)
4. 비밀키 암호화
비밀키 암호화(대칭키 암호화)는 하나의 키를 사용하여 데이터를 암호화하고 복호화하는 방식입니다. 이 방식은 공개키 암호화에 비해 구조가 간단하고, 일반적으로 더 빠른 속도로 데이터를 처리할 수 있습니다.
4.1 비밀키 암호화의 동작 방식
- 메시지 암호화:
- 송신자는 비밀키를 사용하여 메시지를 암호화합니다.
- 암호화 과정은 다음과 같이 진행됩니다:
암호화된 메시지 = Encrypt(메시지, 비밀키)
- 메시지 전송:
- 암호화된 메시지를 수신자에게 전송합니다.
- 메시지 복호화:
- 수신자는 송신자가 사용한 동일한 비밀키를 사용하여 암호화된 메시지를 복호화합니다.
- 복호화 과정은 다음과 같이 진행됩니다:
복호화된 메시지 = Decrypt(암호화된 메시지, 비밀키)
4.2 비밀키 암호화의 장점
- 속도: 대칭키 암호화는 비대칭키 암호화에 비해 상대적으로 빠르며, 대량의 데이터를 처리하는 데 유리합니다.
- 구조의 단순성: 암호화 및 복호화 과정이 간단하고, 구현이 용이합니다.
4.3 비밀키 암호화의 단점
- 키 분배 문제: 송신자와 수신자 간에 비밀키를 안전하게 전달해야 하며, 이 과정에서 공격자에게 노출될 위험이 있습니다. 따라서, 비밀키가 유출되면 데이터의 보안성이 무너집니다.
- 키 관리: 여러 사용자 간에 비밀키를 사용해야 할 경우, 각 사용자마다 별도의 키를 관리해야 하므로 관리의 복잡성이 증가합니다.
4.4 비밀키 암호화 알고리즘 예시
- AES (Advanced Encryption Standard): AES는 현재 가장 널리 사용되는 대칭키 암호화 알고리즘 중 하나입니다.
- DES (Data Encryption Standard): DES는 과거에 널리 사용되었지만, 현재는 보안상의 이유로 AES로 대체되고 있습니다.
- 3DES (Triple DES): DES의 보안성을 강화하기 위해 세 번의 DES 암호화를 적용한 알고리즘입니다.
'개발 > 기록' 카테고리의 다른 글
| React Router의 action과 loader 사용해서 에러 메시지 전달하고 표시하기 (1) | 2024.10.21 |
|---|---|
| React에서 로딩 상태 관리: useNavigation vs useIsFetching (2) | 2024.10.19 |
| vite react typescript 프로젝트 세팅하기 (1) | 2024.10.12 |
| Error 객체를 상속받은 객체 (1) | 2024.10.10 |
| 유연한 UI Component 만들기 (0) | 2024.10.06 |