이 블로그는 개인의 공부 목적으로 작성된 블로그입니다. 왜곡된 정보가 포함되어 있을 수 있습니다.
요새에 휴대폰으로 결제를 하는데 10초도 안걸리는 등 온라인 결제가 발달했는데 이러한 전자 지불 시스템이 어떻게 이루어져 있을까?
전자 지불 시스템
일반적으로 우리가 생각해볼수 있는 방식은 사용자와 판매자 그리고 은행 이렇게 3명으로 전자 지불 시스템이 이루어진다 생각한다. 그런데 실제로는 PG라는 4명이여 전자 지불 시스템을 구성한다.
PG는 Payment Gateway로서 전자자금결제대행업체 또는 전자 결제 서비스라고 부른다.
지불 게이트웨이 방식: 돈 거래에 있어서 거래가 발생하면 거래정보를 받아서 PG 업체가 거래를 중계하고 은행과 정산을 대행한다.
위와 같이 우리가 일반적으로 많이 봐왔던 결제 페이지가 PG의 영역인 것이다.
대표적인 PG업체로는 KG이니시스가 있다.
KG이니시스는 국가 표준 SEED 128bit 대칭키 암호화 알고리즘을 활용하고, RSA를 활용한 전자서명방식을 사용한다.
SET(Secure Electronic Protocol)
공개키 암호 시스템을 활용한 암호 프로토콜로서, 1990년 신용카드 결제에 사용되었던 방식이다(현재는 사용하지 않는다고 한다)
사용자와 상점과 은행, 지불게이트웨이 4가지 요소로 결제를 성공해야 한다. 각각의 관계를 파악해보자
사용자와 상점: 주문과 관련된 정보가 전달된다. 이때 사용자의 결제정보(신용카드 정보)는 최대한 상점이 몰라야한다
상점과 은행: 사용자의 결제정보가 전달된다. 이때 사용자의 주문정보를 은행이 최대한 몰라야한다.
프로토콜은 다음을 보장해야한다.
- 정보의 기밀성(결제 및 지불정보의 암호화)
- 데이터 무결성(주문 정보와 결제 정보가 위변조 되어선 안됨)
- 사용자 인증(사용자 및 사용자의 결제 수단(카드)에 대해 유효성 인증)
- 판매자 인증(판매자의 계좌의 유효성 인증)
이중 해시
위 조건을 만족하기 위해서 다음과 같은 형태로 암호화가 되는데 구매정보 지불 정보를 각각 해시 한후 해시값을 합쳐서 다시 해시하여 전자서명을 한다.
이렇게 암호화하는것이 소용이 있을까? 둘중하나만 몰라도 전자서명을 검증할 수 없는데? 따라서 다른 정보도 넘겨 줘야한다.
우리는 총 5가지 정보를 넘겨준다
- 구매정보(암호화되지 않음)
- 결제정보(사용자가 랜덤하게 생성한 대칭키)
- 비밀키(은행의 공개키로 암호화되어있음(전자봉투))
- 이중해시 값 $H(구매), H(결제)$
- 이중해시 값 $H(H(구매)+H(결제))$
상점에서의 복호화
상점에서 일어나는 일을 생각해보자 상점에서는 5가지의 정보를 모두가지고 있다. 상점에서는 구매정보에 대한 인증을 해야되고 결제정보를 알수 없어야한다.
구매인증
1번인 구매정보를 해시하여 4번의 결제정보를 해시한 값과 합쳐 해시하여 5번과 비교하여 구매인증가능
결제열람
2번 결제정보는 은행의 개인키를 알 수 없어 복호화 할수 없다.
이후 1번을 제외하고 은행에게 넘긴다.
은행에서의 복호화
1번을 제외한 정보를 알고 있고, 결제 열람 및 인증을 할 수 있어야 한다. 또한 구매정보를 알 수 없어야한다.
결제 열람 및 인증
은행 본인의 개인키로 복호화할 수 있다.
또한 결제정보를 해시하여 4번의 구매정보와 함쳐 해시하여 5번과 비교하여 결제 인증가능
구매열람
1번자체가 오지 않아 구매정보를 알 수 없음
결국 5가지 정보를 통해서 은행과 상점 각각이 본인이 필요한 정보만 가질 수 있게 된다!!!
전자화페
신용카드가 아닌 독립적인 신용 구조를 갖는 온라인 상의 현금
현금이기 때문에 현금의 특징인 익명성 양도성을 보장해야한다.
- 익명성: 현금의 사용출저를 알 수 없는 것
- 양도성: 양도할 수 있는 것
위 두가지 특성은 신용카드와 구분되는 현금의 특징
그러나 현금은 실제 물리적으로 사용되는 반면에 전자화페는 그 형체가 없으므로 다음과 같은 보안 요구사항을 만족해야한다.
- 안정성: 위조가 불가능해야함
- 이중 사용 불가: 한번 사용한 전자 화페는 다시 사용할 수 없음(현금에서는 당연하지만 전자화페의 경우는 생각해봐야하는 문제)
- 익명성: 위와 동일
- 오프라인: 일반 상점에서 현금과 같이 거래가 가능해야함
보안 요구사항에 있어서 하나의 의문을 가질 수 있는데 지금까지 우리가 알아봤던 전자 결제 시스템은 결제를 증명하기 위해서 정보가 필요하다(결제정보, 주문정보) 그러나 이를 아는 경우 화페의 특징인 익명성을 만족하지 못하게 된다. 그렇다고 정보를 제공하지 않는다면 위조가 가능하기 때문에 안정성을 만족하지 못한다. 이것을 어떻게 해결할까?
블라인드 서명
위와 같은 문제를 해결하기 위해 블라인드 서명이라는 방식을 채택하고 있다. 말그대로 서명을 가린다는 것이다. 그래서 은행은 해당 정보를 알 수는 없지만 서명이 있다는 것은 알 수 있다는 것이다...
기술적으로 가능한지 모르겠다만 서명을 가린채로 전자화페가 생성해서 사용자가 받을 때는 서명을 볼 수 있어서 해당 전자화페가 사용가능한지 인증 할 수 있다는것이다...(이해가 잘안된다)
사용자가 생성한 랜덤 일련번호에 대해서 블라인드 서명을 생성해서 사용자에게 전달한다고 한다. 또한 상점은 은행의 공개키로 해당 서명을 검증 할 수 있다고 한다(그러면 은행도 일련번호를 알 수 있는 건데?)
블라인드 서명은 믿자...
암호화페
네트워크형 전자화페로 제 3의 신뢰기간을 사용하지 않고, P2P 네트워크를 기반으로 화페의 안전성을 보장하는 방식
우리가 익히 알고 있는 "비트코인"이 이에 해당한다. 우리가 이때까지 했던 화페의 사용검증등 은행의 역활을 블록체인을 이용하게 사용자가 그 역활을 대신 할 수 있다는 개념이다.
- 거래정보를 블록에 저장(전자서명이 포함되어 있음)
- 블록정보가 네트워크를 통해 브로드케스트
- 사용자가 거래의 유효성 인증및 승인
- 승인된 거래가 기존의 블록체인과 연결
- 실제로 거래 진행
transaction
하나의 거래의 흐름을 지칭
$Hash( 이전의 거래내역 +거래내역+수신자의 공개키)$로 암호화하고 송신자의 개인키로 전자서명을 생성,
p2p 서버로 브로드케스트
timestamp server
10분 단위로 브로드케스트된 transaction을 모아 하나의 block을 생성
현재까지 생성된 모든 block에 대한 chained-timestamp 생성
timestamp: Hash(이전 블락의 해시값+ 현재 블락)
-> 부인방지,위조 불가, 이중 지불 방지
중간에 위변조될 수 있지 않을까?
->신뢰된 사람만이 서버에 접근가능해야함(채굴자)
그렇게 되면 이전 블락의 해시값을 어떻게 알까? 모른다
현재 블락의 해시값은 알수 있는가? -> 사실 해시함수가 블락 정보+랜덤값으로 해시함수가 실행된다
따라서 해시값을 알기 위해서는 브루트포스를 해야한다... ->이과정을 채굴이라고 한다.
정리하면 블럭을 연결하기 위해서는 랜덤값을 알아야하고 랜덤값을 찾아내 블럭을 연결하는 것을 채굴이라고한다(작업증명)
'보안' 카테고리의 다른 글
[Spring Security in action] 사용자 관리 (0) | 2024.01.15 |
---|---|
[Spring Security in action] 스프링 시큐리티 시작하기 (0) | 2024.01.11 |
[보안] 전자서명 (0) | 2023.12.02 |
[보안] 비대칭 암호화, ElGamal, RSA (3) | 2023.12.01 |
[보안] 공개키와 비대칭 암호화 알고리즘 (1) | 2023.11.30 |