쟝이의 세상
전자상거래 보안 본문
PKI(공개키기반구조, Public Key Infrastructure)
: 디지털 보안에서 중요한 역할을 하는 시스템
- 공개키 암호화 기반 → 데이터 안전하게 전송, 사용자나 시스템의 신원을 확인할 수 있게 해 줌
- 인터넷을 통해 전달되는 정보의 무결성과 기밀성 보장
PKI의 주요 구성 요소
- 사용자가 RA에 인증서 발급 요청 > 사용자의 신원 확인 > CA에 인증서 발급 요청
- CA는 디지털 인증서를 발급, RA를 통해 사용자에게 전달
- 사용자가 발급받은 인증서를 서버에 제시하면, 서버는 VA를 통해 인증서의 유효성을 검증
- VA는 인증서가 유효한지, 또는 철회되었는지 여부를 서버에 알려줌
이 절차를 통해 PKI는 사용자와 서버 간의 안전한 통신을 하고, 인증서의 신뢰성을 유지
- 공개키와 비밀키
- 공개키: 누구나 접근할 수 있는 키, 데이터 암호화하는데 사용
- 비밀키: 공개키와 쌍을 이루며, 키의 소유자만이 가지고 있는 키. 데이터를 복호화하는데 사용
- 디지털 인증서
- 사용자의 신원을 증명 (인증서에는 "공개키 + 소유자에 대한 정보" 가 포함되어 있음)
- 인증서는 CA에 의해 발급
- 인증기관(CA: Certificate Authority)
- 사용자의 신원을 확인하고, 디지털 인증서를 발급하는 역할
- 인증기관은 PKI에서 신뢰의 중심에 있음
- 등록기관(RA: Registration Authority)
- 인증기관의 역할을 지원하는 기관, 사용자의 신원을 확인하는 역할 담당
- 인증서를 발급하기 전에 사용자 정보 확인 후 CA에 전달
- 인증서 폐지 목록(CRL: Certificate Revocation List)
- CRL : 더 이상 유효하지 않거나 신뢰할 수 없는 인증서들의 목록
- PKI 시스템에서 인증서의 유효성을 검증할 때, 해당 인증서가 이 목록에 있는지 확인하여 신뢰성 유지
PKI의 작동 원리
- 키 쌍 생성
: 사용자는 CA나 RA를 통해 공개키와 비밀키 생성 - 디지털 인증서 발급
: CA는 사용자의 신원을 확인한 후, 사용자에게 공개키가 포함된 디지털 인증서를 발급 - 데이터 암호화 및 전송
: 데이터를 전송할 때, 송신자는 수신자의 공개키를 사용해 데이터를 암호화. 비밀키를 가진 수신자만이 복호화 가능 - 신원 검증
: 수신자는 데이터를 복호화한 후, 데이터가 신뢰할 수 있는 출처에서 왔는지 확인하기 위해 송신자의 디지털 인증서를 검증
PKI는 인터넷 보안의 핵심 요소
→ SSL/TLS를 사용한 웹사이트 보안, 이메일 보안, VPN 접속 등의 다양한 분야에서 활용
SSL/TLS
: 7계층(애플리케이션 계층) 보안 프로토콜
- 인터넷 상에서 데이터를 안전하게 전송하기 위한 프로토콜
- 주로 웹 브라우저와 웹 서버 간의 통신을 보호하기 위해 사용
- 인터넷 사용자가 웹사이트에 접속할 때 그들의 데이터를 암호화하여 도청이나 변조로부터 보호
SSL/TLS의 주요 기능
ex) 클라이언트의 웹브라우저를 통한 검색
- SSL(Secure sockets Layer)
- 웹 서버와 클라이언트 간에 보안 연결을 설정하는데 사용
- 암호화를 통해 데이터 전송의 기밀성을 보장하고, 인증서를 사용해 서버의 신원을 확인하며, 데이터 무결성을 보장한다.
- TLS(Transport Layer Security)
- SSL의 후속 버전, SSL의 취약점을 보완하고 더 강력한 보안 기능 제공하는 프로토콜
- 더 안전하고 효율적인 암호화 메커니즘 사용
- 요즘(2024년) 대부분의 최신 웹브라우저, 서버 소프트웨어, 클라우드 서비스는 기본적으로 TLS를 지원
-> TLS 1.2와 TLS 1.3 주로 사용 - SSL은 더 이상 지원하지 않거나 비활성화된 상태로 제공
- 데이터 암호화
- SSL/TLS는 클라이언트와 서버 간에 전송되는 데이터를 암호화하여 제 3자가 데이터를 엿듣거나 조작하지 못하도록 보호
- 데이터 무결성
- 데이터가 전송되는 도중에 변조되지 않았음을 보장
-> 만약 전송 중에 데이터가 변경되면, 이를 감지할 수 있음- 해시함수(Hash Function)
- 입력 데이터를 고정 길이의 해시값(해시코드)으로 변환하는 수학적 함수
데이터가 변조되면 해시값도 변함
** 해시 함수의 특성 ** 내용 충돌 저항성 서로 다른 두 입력 데이터가 동일한 해시 값을 가지고는 경우는 극히 드물다. 단방향성 해시 값에서 원래 데이터를 복원하는 것은 어렵다. 고속 해시 값을 계산하는 데 시간이 많이 걸리자 않는다.
** 무결성 검증 과정 ** 내용 해시 값 생성 데이터를 전송하기 전에 송신자는 해당 데이터의 해시 값을 계산 해시 값 전송 원본 데이터의 암호화된 데이터와 함께 해시 값을 전송 해시 값 검증 수신자는 수신한 데이터의 해시 값을 다시 계산하고, 전송된 해시값과 비교
두 해시 값이 일치하면 데이터가 변조되지 않았음을 의미
→ 원본 암호화된 데이터 + 해시값을 같이 전송
** 수신자: 암호화된 데이터로 해시 값을 발생 시켜서 송신자가 보낸 해시 값과 비교(위조 여부 판단)
- 입력 데이터를 고정 길이의 해시값(해시코드)으로 변환하는 수학적 함수
- 디지털 서명(Digital Signature)
- 데이터의 무결성을 보장하고 데이터의 출처를 인증하기 위한 방법
해시 함수와 비대칭 암호화(공개키 암호화)를 결합하여 구현
** 디지털 서명의 과정 ** 내용 해시 값 생성 송신자는 전송할 데이터에 대해 해시 값을 생성 서명 생성 송신자는 자신의 개인 키를 사용하여 해시 값을 암호화하여 디지털 서명을 생성 서명 및 데이터 전송 데이터와 함께 디지털 서명 전송 서명 검증 수신자는 데이터의 해시 값을 새로 계산, 송신자의 공개키를 사용하여 디지털 서명을 복호화하여 원본 해시 값과 비교
두 해시 값이 일치하면 데이터가 변조되지 않았고, 서명이 유효하다는 것을 의미
- 데이터의 무결성을 보장하고 데이터의 출처를 인증하기 위한 방법
- 해시함수(Hash Function)
- 해시 함수 - 데이터의 고유한 지문을 생성하고, 전송된 데이터와 비교하여 무결성 확인
- 디지털 서명 - 데이터의 무결성과 출처를 보증하며, 서명을 통해 데이터가 변조되지 않았음을 확인
- 데이터가 전송되는 도중에 변조되지 않았음을 보장
- 서버 인증
- SSL/TLS는 웹사이트가 신뢰할 수 있는 사이트인지 확인할 수 있도록 서버의 신원을 인증
-> 인증기관(CA)으로부터 발급받은 디지털 인증서 사용
- SSL/TLS는 웹사이트가 신뢰할 수 있는 사이트인지 확인할 수 있도록 서버의 신원을 인증
- 클라이언트 인증(선택 사항)
- 서버는 필요할 경우 클라이언트(사용자)의 신원을 확인할 수도 있다.
-> 서버는 특정 사용자만 접근할 수 있게 할 수 있음
- 서버는 필요할 경우 클라이언트(사용자)의 신원을 확인할 수도 있다.
SSL/TLS의 작동 방식
- 핸드셰이크 과정
- 클라이언트와 서버가 서로 통신하기 전에, 암호화 알고리즘과 세션 키를 협상
- 서버는 자신의 디지털 인증서를 클라이언트에 제공하여 자신의 신원을 증명
- 클라이언트는 서버의 인증서를 검증한 후, 세션 키를 생성하고 이를 서버와 공유하여 이후의 통신에 사용
- 데이터 전송
- 세션 키를 통한 암호화
- 세션 키를 사용해 클라이언트와 서버 간의 데이터는 암호화되어 전송
- 세션 종료
- 통신이 끝나면 세션 키는 폐기
-> 이후의 통신에서는 새로운 핸드셰이크를 통해 새로운 세션 키를 생성해야 함
- 통신이 끝나면 세션 키는 폐기
SSL/TLS는 HTTPS를 통해 웹사이트 보안을 제공하며, 인터넷 뱅킹, 이메일 통신, 온라인 쇼핑 등과 같은 민감한 정보의 전송에 필수적이다.
-> HTTPS(Hypertext Transfer Protocol Secure) : HTTP + SSL/TLS 프로토콜 적용
세션 키 협상 과정의 주요 단계
- 클라이언트 헬로(Client Hello)
- 클라이언트는 서버에 연결 요청을 보낼 때
"자신이 지원하는 암호화 알고리즘 목록 + TLS 버전" 을 서버에 제시 - 클라이언트가 임의로 생성한 클라이언트 랜덤 값도 포함
- 클라이언트는 서버에 연결 요청을 보낼 때
- 서버 헬로(Server Hello)
- 서버는 클라이언트로부터 받은 정보 중 사용할 암호화 알고리즘 선택, 자신이 지원하는 인증서와 함께 응답
- 서버가 임의로 생성한 서버 랜덤 값도 포함
- 서버 인증 및 키 교환
- 서버는 클라이언트에게 자신의 디지털 인증서를 전송하여 신원을 증명
-> 클라이언트는 이 인증서를 확인하여 서버가 신뢰할 수 있는지 확인 - 서버가 RSA 암호화 방식을 사용할 경우, 클라이언트는 서버의 공개키를 사용하여 Premaster Secret(예비 비밀 값)을 암호화하고 서버에 보냄
- 서버는 클라이언트에게 자신의 디지털 인증서를 전송하여 신원을 증명
- 세션 키 생성
- 클라이언트와 서버는 각각 자신들이 가진 클라이언트 랜덤 값, 서버 랜덤 값, Premaster Secret(예비 비밀 값)을 조합하여 동일한 세션 키를 생성
- 클라이언트와 서버 간의 데이터 전송을 암호화하는데 사용
- 세션 키 확인 및 완료 (암호화 테스트)
- 클라이언트와 서버는 서로 세션 키를 사용해 짧은 메시지를 암호화하여 상대방에게 보내고 이를 성공적으로 복호화할 수 있는지 확인
- 모든 과정이 완료되면, 클라이언트와 서버는 세션 키를 사용해 암호화된 데이터를 주고받을 수 있게 됨
세션 키 협상의 사용 이유
보안
: 세션 키는 일회용 키로, 각 세션마다 새로운 키가 생성
-> 동일한 키가 여러 번 사용되는 것을 방지하여 보안성을 높임
성능
: 공개키 암호화 방식은 연산이 복잡하고 느리기 때문에, 데이터 전송 시에는 빠르고 효율적인 대칭키 암호화(세션 키)를 사용
-> 세션 키 협상을 통해 클라이언트와 서버가 같은 대칭키를 공유할 수 있게 됨
세션 키의 역할
세션 키는 대칭키 암호화에 사용되며, 클라이언트와 서버 간의 데이터 전송 시 데이터를 암호화하고 복호화하는 데 사용
세션 키 협상에서 공개키의 역할
공개키는 클라이언트가 세션 키를 안전하게 서버에 전송하기 위해 사용
""예를 들어)
클라이언트 - 서버의 공개키를 사용해 세션 키를 암호화한 후 서버로 전송
서버 - 자신의 비밀키를 사용해 이를 복호화
전달된 정보를 바탕으로, 클라이언트와 서버는 동일한 세션 키를 생성 ""
세션 키는 공개키가 아니며 대칭키 암호화에 사용되는 일회성 키이다.
-> 공개키는 이 세션 키를 안전하게 교환하는 데 사용되는 도구일 뿐
웹사이트에서의 공개키 기반 암호화
- 서버 인증
- 웹사이트 서버는 자신이 신뢰할 수 있는 사이트임을 증명하기 위해 디지털 인증서(서버의 SSH)를 사용
- 이 인증서에는 서버의 공개키가 포함, 인증기관(CA)에 의해 발급된 것
- 공개키를 사용한 세션 키 교환
- 클라이언트는 서버와 안전한 통신을 시작할 때, 서버의 공개키를 사용해 세션 키를 암호화하여 서버로 보냄
- 서버는 자신의 비밀키를 사용해 이 정보를 복호화하여 세션키를 얻음
- 대칭키 암호화로 데이터 전송
- 세션 키가 협상된 후, 클라이언트와 서버는 대칭키 암호화 방식으로 데이터를 암호화하여 주고받음
-> 이때 사용되는 키: 세션 키
- 세션 키가 협상된 후, 클라이언트와 서버는 대칭키 암호화 방식으로 데이터를 암호화하여 주고받음
공개키 기반의 장점
- 보안성
: 클라이언트와 서버 간에 교환되는 정보가 도중에 탈취되더라도, 비밀키를 모르면 세션 키를 복호화할 수 없음
- 신뢰성
: 클라이언트는 서버의 인증서를 검증, 자신이 접속한 서버가 실제로 신뢰할 수 있는 서버인지 확인 가능
대칭키(세션 키)의 특징
- 동일한 키 사용
: 세션 키는 데이터를 암호화하고 복호화하는 데 동일한 키 사용
즉, 클라이언트와 서버가 같은 세션 키를 공유하고, 이 키로 통신 내용을 암호화하고 복호화 함
- 빠른 암호화/복호화 속도
: 대칭키 암호화는 공개키 암호화에 비해 연산이 간단하고 빠름 -> 대량의 데이터를 암호화하는 데 적합
세션 키의 역할
- 데이터 보호
: 세션 키를 사용하여 클라이언트와 서버 간의 데이터가 암호화됨
- 일회성 사용
: 세션 키는 특정 세션 동안만 사용되며, 세션이 종료되면 폐기. 새로운 통신 세션 시작 시 새로운 세션 키 생성
'수업내용' 카테고리의 다른 글
php <배열과 함수> (2) | 2024.09.02 |
---|---|
php <조건문 switch, 반복문> (0) | 2024.08.29 |
php <문자열 출력 echo, 연산자, 변수, 조건문 if> (6) | 2024.08.28 |
<WIN2022 + PHP + SQL Server> 웹 데이터베이스 연동 (0) | 2024.08.28 |
암호화 알고리즘 (0) | 2024.08.26 |