Konaplate logo

개발 가이드

MESSAGE ENCRYPTION 이란?            

KONA PLATE를 통한 KONA 결제 플랫폼 서비스 사용을 위해 제공되는 API는 개인정보 및 민감한 데이터를 요청받거나 또는 응답을 제공하고 있습니다.

KONA PLATE는 TLS(전송 계층)의 보안과 카드 정보, 고객 정보 등 다양한 민감성 있는 외부 누출로 인한 데이터 재사용을 하지 못하도록 비대칭 암호화 방식을 통한 데이터 보안 서비스를 재공하고 있습니다. 

ME는 아래의 내용의 데이터 포함 시 제공되고 있습니다.

  1. PII (personally identifiable information / 개인 식별 정보)
  2. PAN (primary account number / 개인 계좌 번호)
  3. PAI (Personal Account 개인 계정 정보)

KONA PLATE의 ME는 비대칭 암호화 기술(공개 키 암호화)을 사용하여 메시지 메피로드에 대한 향상된 보안을 제공합니다. 

ME는 128비트 또는 256비트의 AES(Advacnced Encrytpion Stardard), GCM(Glois Counter Mode)을 사용하는 대칭 암호화를 통해 개발되었습니다. 

키 암호화는 2048비트의 RSA OAEP(Optimal Asymmetric Encryptio Padding)로 지원하고 있습니다.

ME는 JWE를 사용하여 SSL을 통해 Request, Response의 암/복호화를 지원하며 API의 Request/Response 암호화 여부를 확인하여 요청되어야 합니다.

API의 Request/Response 암호화 여부는 Api Document에서 확인해 주시기 바랍니다.

  1. 서버 인증서 : KONA PLATE에 요청을 보낼 때 클라이언트는 서버 공개 키를 사용하여 메시지 페이로드를 암호화하고 KONA PLATE는 서버 개인 키를 사용하여 페이로드를 복호화 합니다.
  2. 클라이언트 인증서 : KONA PLATE에서 응답을 받을 때 KONA PLATE는 클라이언트의 공개키를 사용하여 페이로드를 암호화 하고 클라이언트는  서버의 개인 키를 사용하여 복호화 합니다.

 


MESSAGE ENCRYPTION 요청 방법

  1. 생성된 프로젝트에서 암호화 키를 발급받습니다.
  2. 서버의 공개키를 이용하여 페이로드를 암호화하여 문자열로 생성합니다.
  3. 요청의 헤더에 X-KM-Crypto-Key-Id의 이름으로 암호화 키 ID를 추가합니다.
    헤더 항목 Value
    Accept application/json
    X-KM-Crypto-Key-Id x-km-crypto-key-id*
  4. encData의 필드명으로 서버에 API를 요청합니다. 응답도 암호화 설정이 있는 경우 encData의 필드명으로 응답이 되어 집니다. 
  5. 응답 값이 암호화가 된 경우 응답 값의 헤더 값의 암호화 키의 서버 공개키로 데이터를 복호화 합니다.

    Sample Message Encryption
    구분 Message
    Request {
        "encData": "eyJlbmMiOiJBMTI4R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.Jr_65BmLWw6lpcbRTWXH6fi04RvoSs6nv6WRh99mletj5vSoFkJf6y
    JnJrtz3FKw9t2oOLX-_zb-F08dOtt6xVlMlb41HEIvRtINGNpMIKNQnmryiVCmDyPc7NFxLoCTMAcv4cxtL9FX-TpX_sNty5Nm2MsrKNnjln8nVQvoFtt
    brFpED7vCfFqKmqAp9bDQwyp8PJXBjOxdAe0F0DsdoEp5al7cwY9I7cBEhCI452qR_wXyikrAesaN74a9vEEn6znetrRwcyzc8gLou9agQ8ppdWrS8
    VpS5oOBXW5953lR_Br0tkBB7fCL2nB8C_gLCD0P8IlSeDYnQn7je_izyg.TsETXkd6Xa-TGPhI.VFsS2-brNJwYJqdWfqcepmF-u1zhAf3cy0lFMp9k4Yy
    739p_P0of1VxrIWeqd5o3DdPuDtEY16coIiZd7m_9GrVb_m_X9w.ksZ2ueGkYovMS9ODX7m1zg"
    }
    Response

    {
        "encData": "eyJlbmMiOiJBMTI4R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.P0S41dkjgELl7yOf4dM9ld7e4X4IQ3nlhUbBDAV9Mv6AGhdr4KH-HPjOY
    unEKzf9JrLFngNmTTfxYjMngNGHKShE3h-WMf-Il1PlBNyd7_Rbq1uQre4UOyG7zzKESMdc8yE8hhJwqVHQscIyfGGex3NKpTmHci4i97-JytW-Ubqqx
    x8qvd0q5b8WJ3ykszh3ZcVbfv2nssCZKhoK0fhVsHx1Ucbd4TTNgIsOBeyKRXbxsLAkcsZbMeVcVdDQFX60qzxTMzBtA22SmgAXqrur5R0byVf27f9p
    4DakkvXPXZI9zwCssOPlXE_8nXZ1CrNwiGsLg5iEQ9zI6CcOy8t-w._K98ydHorNTKsSJB.aYpj6ZXT2Ll2S5LOLuigdDeLOQ4FoL9bJbW9waS-KOFow2
    VavpvYMy7Ngn_-GIuXD5ghVEx6dJhSbPLDqRehrYrmQlkuSwAOq8upwFJV0CY4AIDX4z1tsNsRS2GsOvc3XHAEZd3iC9ZFSg8JXMHF9n
    TJkKWKDl2xvLMuC8OEC70g4qnsTMUkvYGcIF62UObeU4h2DqFzk_L0rTlXXyg6o
    uQiYtmIfVaTbpRPa2IcjWJe0iWswubG4YCmuJKJs-VLG3pid08IcUsETW3MlaqkAVlS1XaRpE8kYHTbfGfbp3Ckw8h7Ur55_iFEZwI19caMleQE6lSkVryimudIaVjQaWrHnLNR1cHR0mWJeUW4xTeGnVrtYeWjH
    uJ7zsgMhvLQbISaySDRqEu7fEA8Jp7TkC0ywR-0f8ajRYDstFotcTDkP9QI1CadVLCEBIm3ndFkn5BIj-i6xcfZSOFn2rzc0GsezqbY07DcebTtC2CAmQZLdJ-iWTpU-6mdV_nSy1NPlry0eszsQlwItTTB2ktsUTll9oRpdyaucPTMB2r90Lc9bDMy1bipUMgBLoLGyFUNC-1BDgUnmC_X6nYoCDA7QHH_F53xtbNn4lb8a6THCHFFgTMz63rgtwg9r2pAeDMBH7ouTRDzLN4SKlU0OpjmhcQ1Td0WoyjfUHoCse_Cm9-Zbueegfk5XB24YF0ctK.-NN9qbJL-HRd3gfcGBZBfA"
    }

     


PEM Sample 

  1. 인코딩 방식은 UTF-8 입니다
  2. 서버 PEM 파일에서는 개인키를 제공하지 않습니다.

파일명 예시 : 5cd10fa4b92f7b33995360267efc67cf_client.pem

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnuPt1AO/tRu/67qbs/wkJlKJ+8rD69CoG6i2BjFN1RfURse2KTNPT+Yp8JUn9Pgk7Qm8kawPbQoGmizo3deLwc0
oQJimxaIDtFuAFWNXFlXN//Foi+BrLtHCETJ0MV4t3PSAhntiCG6I6dloKl4VtHqwpqJxSp7aWvAmVWd83tG5QhSY4Zmlb9HrK5cTcQKBQE9iAbHj0hHprWj9Am2sN9D5jYA
N6FXf05Oan3hY7ulIixPCiuQUUZQep3AmvsAlJS95skbsmlUxfyDZSvdjLO0TJ9Vaa1mPp5A8Gd3kyvrJ8Atktx9HGZqz0JPdMx9ft5PuV+EqHocNSPRHM44pgwIDAQAB
-----END PUBLIC KEY-----

-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCe4+3UA7+1G7/rupuz/CQmUon7ysPr0KgbqLYGMU3VF9RGx7YpM09P5inwlSf0+CTtCbyRrA9tCga
aLOjd14vBzShAmKbFogO0W4AVY1cWVc3/8WiL4Gsu0cIRMnQxXi3c9ICGe2IIbojp2WgqXhW0erCmonFKntpa8CZVZ3ze0blCFJjhmaVv0esrlxNxAoFAT2IBsePSEemtaP
0Cbaw30PmNgA3oVd/Tk5qfeFju6UiLE8KK5BRRlB6ncCa+wCUlL3myRuyaVTF/INlK92Ms7RMn1VprWY+nkDwZ3eTK+snwC2S3H0cZmrPQk90zH1+3k+5X4Soehw1I9E
czjimDAgMBAAECggEBAJFodhY4+BB+PL02IZgtf8eycaSEg5gjdDUbyLkSFfCVxiagTgyWcFbmhCsv1UlSbjifWHrXw6Y+LpyZzOJ4h+XsIpI7ISRsiIdd1XG9X82I6OT5wHuB
/ZTzUW77hWpIjiBPge+Qqr6cqZ+Y3sMnJyXrwg49SwDHL31ZmTs/Yf9m5ATQC/z3Ce5lGCC71rISorYdh6fjtJ5E0TTtbUVvmNm7JNNGsbmf/T1/WaauA0eDTlZqRtziJFDK
of4KvjaKkUdrjV1V6IK7We5hMkhXxzMvftVUv+cOkR0ZZj5HDf/Z/Bx5GArPCcGgs/FYiGJtzncqxWq5c73lfiaBmzeT8YECgYEA/bComzyWuhHe6u31ZYgtxy66RfniuC3ZSD
nYkPChK+0nDejbze/OyD0/domEZVF4sBhzMuwZTJWWvN3ePq2U5x6L+G4DkCvgBneywvbeBwj4fd6iMEuIDQRXkBYRXmM+Eet6Y+8eB38Ygoh2oiML4Jo49+RUupZ0
ie1pNnK6hxsCgYEAoFZLyWmVLPlstQYxrfyYrQ4zbKmeFP5c9x5oSkB0/V3NnDlWM+GkU6maJVuLwsLe976iwg8Y50YM8O2+3CTvywtmDdiVbOv3Lg+LLXk+AGiy6Ozr
XX/P55g3Hv04V8ybgtLKwq91BXuG2MxP7n4bAUvBfI6qhpViZlmHkzlNBbkCgYBqW6oUiy5WDC/9Jo5/ZrxqiXim5cDbnr09vqLBAWFQ3ThGaJ3elO+Im8UDmVvcbm++xE
Fn0/w3U2/C9vG6LWQEEZZ1LQppYzuk+oIDoyQqpuQnQTOWM9RyQKPFULsva0QWlzbUtudMFUjdUQELsM3F+GJx61RqdbGeMd6uaSMyiQKBgQCHqLwyzAyVouwhNf5
usVwUgAFunQzNwnGx/J5MxMC3ZtiCp9iRyQaaatOrbAuSXAL/JuLawp9VfuWQK/fil7Xz288bQ/cZ04SuCiS98ulMu0k03tA9qdikoRtyMtmrH8ksJWG822ttmhh78lJm/Xen3
wr0cllByb8ZzgJxxHewsQKBgQDAu+eEJZlasVmmEVopQwNKxMLY+m98DfM32Fgf9VyuwguM
-----END PRIVATE KEY-----


Sample Code - Encryption/Decryption

#Java