📑 Message Encryption


| Message Encryption 이란?

KONA PLATE를 통해 제공되는 API는 개인정보 및 민감 데이터를 포함하고 있기 때문에 TLS(Transport Layer Security)의 보안과 다양한 민감 정보를 외부로 누출해 재사용하지 못하도록 비대칭 암호화 방식을 통한 데이터 보안 서비스를 제공하고 있습니다.

ME(Message Encryption)는 아래 데이터를 포함할 때 제공하고 있습니다. 1. PII(Personally Identifiable Information) : 개인 식별 정보 2. PAN(Primary Account Number) : 개인 계좌 번호 3. PAI(Personal Account Information) : 개인 계정 정보

KONA PLATE의 ME는 비대칭 암호화 기술(공개 키 암호화)을 사용하여 Message Payload에 대한 향상된 보안을 제공합니다. ME는 128비트 또는 256비트의 AES(Advacnced Encrytpion Stardard), GCM(Glois Counter Mode)을 사용하는 대칭 암호화를 통해 개발되었습니다.  키 암호화는 2,048비트의 RSA-OAEP(Rivest ShamirAdleman-Optimal Asymmetric Encryptio Padding)로 지원하고 있습니다.

ME는 JWE(JSON Web Encryption)를 사용하여 SSL(Secure Sockets Layer)을 통해 Request, Response의 암/복호화를 지원하며 API의 Request/Response 암호화 여부를 확인하여 요청되어야 합니다. API의 Request/Response 암호화 여부는 API Document에서 확인할 수 있습니다. 1. 서버 인증서 : KONA PLATE에 요청을 보낼 때 클라이언트는 서버 공개 키를 사용하여 Message Payload를 암호화하고 KONA PLATE는 서버 개인 키를 사용하여 Payload를 복호화 합니다. 2. 클라이언트 인증서 : KONA PLATE에서 응답을 받을 때 KONA PLATE는 클라이언트의 공개 키를 사용하여 Payload를 암호화 하고 클라이언트는  서버의 개인 키를 사용하여 복호화 합니다.

| Message Encryption 요청 방법

  1. 생성된 프로젝트에서 암호화 키를 발급 받습니다.
  2. 서버의 공개 키를 이용하여 Payload를 암호화하여 문자열로 생성합니다.
  3. 요청의 헤더에 X-KM-Crypto-Key-Id의 이름으로 암호화 키 ID를 추가합니다

4. encData의 필드명으로 서버에 API를 요청합니다. 응답도 암호화 설정이 있는 경우 encData의 필드명으로 응답이 되어 집니다. 

5. 응답 값이 암호화가 된 경우 응답 값의 헤더 값의 암호화 키의 서버 공개키로 데이터를 복호화 합니다.

* Sample Message Encryption

Request Message {  "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 Message {     "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+Yp8JUn9Pgk7Qm8kawPbQoGmizo3deLwc0oQJimxaIDtFuAFWNXFlXN//Foi+BrLtHCETJ0MV4t3PSAhntiCG6I6dloKl4VtHqwpqJxSp7aWvAmVWd83tG5QhSY4Zmlb9HrK5cTcQKBQE9iAbHj0hHprWj9Am2sN9D5jYAN6FXf05Oan3hY7ulIixPCiuQUUZQep3AmvsAlJS95skbsmlUxfyDZSvdjLO0TJ9Vaa1mPp5A8Gd3kyvrJ8Atktx9HGZqz0JPdMx9ft5PuV+EqHocNSPRHM44pgwIDAQAB -----END PUBLIC KEY-----

-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCe4+3UA7+1G7/rupuz/CQmUon7ysPr0KgbqLYGMU3VF9RGx7YpM09P5inwlSf0+CTtCbyRrA9tCgaaLOjd14vBzShAmKbFogO0W4AVY1cWVc3/8WiL4Gsu0cIRMnQxXi3c9ICGe2IIbojp2WgqXhW0erCmonFKntpa8CZVZ3ze0blCFJjhmaVv0esrlxNxAoFAT2IBsePSEemtaP0Cbaw30PmNgA3oVd/Tk5qfeFju6UiLE8KK5BRRlB6ncCa+wCUlL3myRuyaVTF/INlK92Ms7RMn1VprWY+nkDwZ3eTK+snwC2S3H0cZmrPQk90zH1+3k+5X4Soehw1I9EczjimDAgMBAAECggEBAJFodhY4+BB+PL02IZgtf8eycaSEg5gjdDUbyLkSFfCVxiagTgyWcFbmhCsv1UlSbjifWHrXw6Y+LpyZzOJ4h+XsIpI7ISRsiIdd1XG9X82I6OT5wHuB/ZTzUW77hWpIjiBPge+Qqr6cqZ+Y3sMnJyXrwg49SwDHL31ZmTs/Yf9m5ATQC/z3Ce5lGCC71rISorYdh6fjtJ5E0TTtbUVvmNm7JNNGsbmf/T1/WaauA0eDTlZqRtziJFDKof4KvjaKkUdrjV1V6IK7We5hMkhXxzMvftVUv+cOkR0ZZj5HDf/Z/Bx5GArPCcGgs/FYiGJtzncqxWq5c73lfiaBmzeT8YECgYEA/bComzyWuhHe6u31ZYgtxy66RfniuC3ZSDnYkPChK+0nDejbze/OyD0/domEZVF4sBhzMuwZTJWWvN3ePq2U5x6L+G4DkCvgBneywvbeBwj4fd6iMEuIDQRXkBYRXmM+Eet6Y+8eB38Ygoh2oiML4Jo49+RUupZ0ie1pNnK6hxsCgYEAoFZLyWmVLPlstQYxrfyYrQ4zbKmeFP5c9x5oSkB0/V3NnDlWM+GkU6maJVuLwsLe976iwg8Y50YM8O2+3CTvywtmDdiVbOv3Lg+LLXk+AGiy6OzrXX/P55g3Hv04V8ybgtLKwq91BXuG2MxP7n4bAUvBfI6qhpViZlmHkzlNBbkCgYBqW6oUiy5WDC/9Jo5/ZrxqiXim5cDbnr09vqLBAWFQ3ThGaJ3elO+Im8UDmVvcbm++xEFn0/w3U2/C9vG6LWQEEZZ1LQppYzuk+oIDoyQqpuQnQTOWM9RyQKPFULsva0QWlzbUtudMFUjdUQELsM3F+GJx61RqdbGeMd6uaSMyiQKBgQCHqLwyzAyVouwhNf5usVwUgAFunQzNwnGx/J5MxMC3ZtiCp9iRyQaaatOrbAuSXAL/JuLawp9VfuWQK/fil7Xz288bQ/cZ04SuCiS98ulMu0k03tA9qdikoRtyMtmrH8ksJWG822ttmhh78lJm/Xen3wr0cllByb8ZzgJxxHewsQKBgQDAu+eEJZlasVmmEVopQwNKxMLY+m98DfM32Fgf9VyuwguM -----END PRIVATE KEY-----

| Sample Code : Encryption/Decryption

🔹 Sample Code 확인하기