의견.png

"키스토어"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
37번째 줄: 37번째 줄:
 
|align=center|aes - 128 - cbc
 
|align=center|aes - 128 - cbc
 
|}
 
|}
: '''KDF 알고리즘 비교'''
+
* '''KDF 알고리즘 비교'''
 
:* '''비크립트'''(bcrypt) : 비크립트는 애초부터 패스워드 저장을 목적으로 설계되었으며, 닐스 프로보스(Niels Provos)와 데이비드 마지 에르(David Mazières)가 1999년 발표했고 현재까지 사용되는 가장 강력한 해시 메커니즘 중 하나이며, 비크립트는 보안에 집착하기로 유명한 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되고 있고, PBKDF2보다 더 경쟁력이 있다.
 
:* '''비크립트'''(bcrypt) : 비크립트는 애초부터 패스워드 저장을 목적으로 설계되었으며, 닐스 프로보스(Niels Provos)와 데이비드 마지 에르(David Mazières)가 1999년 발표했고 현재까지 사용되는 가장 강력한 해시 메커니즘 중 하나이며, 비크립트는 보안에 집착하기로 유명한 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되고 있고, PBKDF2보다 더 경쟁력이 있다.
  
 
:* '''PBKDF2''' : 가장 많이 사용되는 키 도출 기능은 PBKDF2(Password-Based Key Derivation Function)이다. 해시 함수의 컨테이너인 PBKDF2는 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있고, PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.
 
:* '''PBKDF2''' : 가장 많이 사용되는 키 도출 기능은 PBKDF2(Password-Based Key Derivation Function)이다. 해시 함수의 컨테이너인 PBKDF2는 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있고, PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.
'''키 암호화'''
+
: '''키 암호화'''
 
  DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
 
  DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
 
  PRF: hmac-sha256
 
  PRF: hmac-sha256
51번째 줄: 51번째 줄:
 
  AES(128b), CBC, PKCS7 Padding
 
  AES(128b), CBC, PKCS7 Padding
  
'''클라이언트 DB 구조'''
+
: '''클라이언트 DB 구조'''
 
  {
 
  {
   {{글자색|"accounts"|#ff0000}}: [
+
   {{글자색|"accounts"|#9b48a3}}: [
 
     {
 
     {
       {{글자색|"address"|#ff0000}}: {{글자색|"97995C6B3067764F1Fa3972814331df80004c9d7"|20c93a}},
+
       {{글자색|"address"|#9b48a3}}: {{글자색|"97995C6B3067764F1Fa3972814331df80004c9d7"|#269624}},
       {{글자색|"encryptedKey"|#ff0000}}: {{글자색|"6a30d30e2d4fb11f9524214bf98d5648d888f1280b624b6148bf02f0866039e7b5c636410e960f97589a5da703c9a264"|20c93a}},
+
       {{글자색|"encryptedKey"|#9b48a3}}: {{글자색|"6a30d30e2d4fb11f9524214bf98d5648d888f1280b624b6148bf02f0866039e7b5c636410e960f97589a5da703c9a264"|#269624}},
       {{글자색|"iv"|#ff0000}}: {{글자색|"f96fedb017c9e51f1056e6ee1a526711"|20c93a}},
+
       {{글자색|"iv"|#9b48a3}}: {{글자색|"f96fedb017c9e51f1056e6ee1a526711"|#269624}},
  {{글자색|"kdfParams"|#ff0000}}: {
+
  {{글자색|"kdfParams"|#9b48a3}}: {
         {{글자색|"dklen"|#ff0000}}: {{글자색|32|#ff0000}},
+
         {{글자색|"dklen"|#9b48a3}}: {{글자색|32|#9b48a3}},
         {{글자색|"salt"|#ff0000}}: {{글자색|"fa3a56b2c27740bd1b22a107288bcd989261b7f88e16051e4e5f043e21440524"|20c93a}},
+
         {{글자색|"salt"|#9b48a3}}: {{글자색|"fa3a56b2c27740bd1b22a107288bcd989261b7f88e16051e4e5f043e21440524"|#269624}},
         {{글자색|"c"|#ff0000}}: {{글자색|4000|#ff0000}},
+
         {{글자색|"c"|#9b48a3}}: {{글자색|4000|#9b48a3}},
         {{글자색|"prf"|#ff0000}}: {{글자색|"hmac-sha256"|20c93a}}
+
         {{글자색|"prf"|#9b48a3}}: {{글자색|"hmac-sha256"|#269624}}
 
       }
 
       }
 
     }
 
     }
 
   ]
 
   ]
 +
}
 +
: '''클라이언트 키 파일 사양구조'''
 +
{
 +
  {{글자색|"address"|#9b48a3}}: {{글자색|"d21307c7c57320dfd21fb805f18c70a1a8b2f1c5"|#269624}},
 +
  {{글자색|"crypto"|#9b48a3}}: {
 +
    {{글자색|"cipher"|#9b48a3}}: {{글자색|"aes-128-cbc"|#269624}},
 +
    {{글자색|"cipherparams"|#9b48a3}}: {
 +
      {{글자색|"iv"|#9b48a3}}: {{글자색|"2a8908f116079b804f1bc4e46181db92"|#269624}}
 +
    },
 +
    {{글자색|"ciphertext"|#9b48a3}}: {{글자색|"35f62f87336d51a63047230074de88d00ab334684cbb5909a9d1c0ee37a34ac5e40e0da858f0b7d021d85e67c4066e55"|#269624}},
 +
    {{글자색|"kdf"|#9b48a3}}: {{글자색|"pbkdf2"|#269624}},
 +
    {{글자색|"kdfparams"|#9b48a3}}: {
 +
      {{글자색|"c"|#9b48a3}}: {{글자색|262144|#9b48a3}},
 +
      {{글자색|"dklen"|#9b48a3}}: {{글자색|32|#9b48a3}},
 +
      {{글자색|"prf"|#9b48a3}}: {{글자색|"hmac-sha256"|#269624}},
 +
      {{글자색|"salt"|#9b48a3}}: {{글자색|"3c1c0475ae162df514856769f0050c0a879013c31c6dff871d86d21111050298"|#269624}}
 +
    },
 +
    {{글자색|"mac"|#9b48a3}}: {{글자색"60d2321155dab16e1d73753669fdbb21ea9b65030996994559a52dcd653f51b1"||#269624}}
 +
  }
 
  }
 
  }
  
 
:* '''스크립트'''(scrypt) : 스크립트는 PBKDF2와 유사한 적응 형 키 도출 기능 이며 콜린 퍼시발(Colin Percival)이 2012년 9월 17일 설계했다. 스크립트는 다이제스트를 생성할 때 메모리 오버헤드를 갖도록 설계되어, 억지 기법 공격(brute-force attack)을 시도할 때 병렬화 처리가 매우 어렵워 PBKDF2보다 안전하다고 평가되며 비크립트에 비해 더 경쟁력이 있다. 스크립트는 보안에 아주 민감한 사용자들을 위한 백업 솔루션을 제공하는 타스냅(Tarsnap)에서도 사용하고 있으며, 여러 프로그래밍 언어의 라이브러리로 제공받을 수 있다. PBKDF2와의 차이점이라면, PBKDF2는 가벼운 알고리즘으로써 모든 기기에 구현 가능하다는 장점이 있지만, 이 장점이 역으로 공격자가 가볍게 수백, 수천개의 병렬 연산으로 무차별 대입 공격을 가능하게 할 수 있다.
 
:* '''스크립트'''(scrypt) : 스크립트는 PBKDF2와 유사한 적응 형 키 도출 기능 이며 콜린 퍼시발(Colin Percival)이 2012년 9월 17일 설계했다. 스크립트는 다이제스트를 생성할 때 메모리 오버헤드를 갖도록 설계되어, 억지 기법 공격(brute-force attack)을 시도할 때 병렬화 처리가 매우 어렵워 PBKDF2보다 안전하다고 평가되며 비크립트에 비해 더 경쟁력이 있다. 스크립트는 보안에 아주 민감한 사용자들을 위한 백업 솔루션을 제공하는 타스냅(Tarsnap)에서도 사용하고 있으며, 여러 프로그래밍 언어의 라이브러리로 제공받을 수 있다. PBKDF2와의 차이점이라면, PBKDF2는 가벼운 알고리즘으로써 모든 기기에 구현 가능하다는 장점이 있지만, 이 장점이 역으로 공격자가 가볍게 수백, 수천개의 병렬 연산으로 무차별 대입 공격을 가능하게 할 수 있다.
'''키 암호화'''
+
: '''키 암호화'''
 
  DIGEST = scrypt(Password, Salt, N, r, p, DLen)
 
  DIGEST = scrypt(Password, Salt, N, r, p, DLen)
 
  Password
 
  Password
80번째 줄: 99번째 줄:
 
  AES(512b), CBC, PKCS7 Padding
 
  AES(512b), CBC, PKCS7 Padding
  
'''클라이언트 DB 구조'''
+
: '''클라이언트 DB 구조'''
 
  {
 
  {
   {{글자색|"accounts"|#ff0000}}: [
+
   {{글자색|"accounts"|#9b48a3}}: [
 
     {
 
     {
       {{글자색|"address"|#ff0000}}: {{글자색|"8370416C75C48f4e26B84CDD79D57f7b629E861E"|20c93a}},
+
       {{글자색|"address"|#9b48a3}}: {{글자색|"8370416C75C48f4e26B84CDD79D57f7b629E861E"|#269624}},
       {{글자색|"encryptedKey"|#ff0000}}: {{글자색|"efb8a91edbd2518a64774f9074781b6d8f8bfa2ff47bba8bd31faf437f87b8f3442cdb24b80d79fca6bdb2ff1497d2fc"|20c93a}},
+
       {{글자색|"encryptedKey"|#9b48a3}}: {{글자색|"efb8a91edbd2518a64774f9074781b6d8f8bfa2ff47bba8bd31faf437f87b8f3442cdb24b80d79fca6bdb2ff1497d2fc"|#269624}},
       {{글자색|"iv"|#ff0000}}: {{글자색|"8b135a3c533aeffff4babbc3052c9120"|20c93a}},
+
       {{글자색|"iv"|#9b48a3}}: {{글자색|"8b135a3c533aeffff4babbc3052c9120"|#269624}},
       {{글자색|"kdfParams"|#ff0000}}: {
+
       {{글자색|"kdfParams"|#9b48a3}}: {
         {{글자색|"dklen"|#ff0000}}: {{글자색|32|#ff0000}},
+
         {{글자색|"dklen"|#9b48a3}}: {{글자색|32|#9b48a3}},
         {{글자색|"salt"|#ff0000}}: {{글자색|"37e9b309d6ff35df9745386df5979353541e41a1ccc84ebf5b0b78bda7e336bc"|20c93a}},
+
         {{글자색|"salt"|#9b48a3}}: {{글자색|"37e9b309d6ff35df9745386df5979353541e41a1ccc84ebf5b0b78bda7e336bc"|#269624}},
         {{글자색|"n"|#ff0000}}: {{글자색|4096|#ff0000}},
+
         {{글자색|"n"|#9b48a3}}: {{글자색|4096|#9b48a3}},
         {{글자색|"r"|#ff0000}}: {{글자색|8|#ff0000}},
+
         {{글자색|"r"|#9b48a3}}: {{글자색|8|#9b48a3}},
         {{글자색|"p"|#ff0000}}: {{글자색|1|#ff0000}}
+
         {{글자색|"p"|#9b48a3}}: {{글자색|1|#9b48a3}}
 
       }
 
       }
 
     }
 
     }

2019년 9월 6일 (금) 11:19 판

키스토어(Key Store)란 암호화폐 지갑을 사용하기 위한 프라이빗 키(private key)를 비밀번호로 암호화한 텍스트 또는 파일이다.

특징

  • 키스토어는 텍스트나 파일을 보관하고 있다가, 다른 지갑에 불러올 때 이를 입력한 후 알맞은 비밀번호를 입력하면, 복호화되어 프라이빗 키를 도출할 수 있게 된다.
  • 한 번 암호화된 파일이므로 키스토어 파일은 컴퓨터나 메모장 등에 보관하기 안전하다. 단, 비밀번호가 너무 쉬우면, 무차별대입 공격으로 쉽게 뚫릴 수 있다. 최소 8자, 권장 12자 이상의 어려운 비밀번호 사용을 권장한다.[1]

프라이빗 키

  • 암호화폐 지갑은 블록체인 네트워크에서 사용자들의 코인이 저장되는 공간이다. 모든 지갑은 고유한 주소가 존재하며, 이 주소와 1:1 대응되는 비밀번호와 같은 역할을 하는 프라이빗 키가 존재한다.
  • 프라이빗 키를 사용하면 해당 지갑에 접근할 수 있다. 따라서 프라이빗 키를 잘 보관해야 한다. 그런 면에서 비밀번호와 비슷하다고 생각할 수 있지만, 비밀번호와 달리 변경/복구 등이 불가능하다.
  • 분실한 프라이빗 키는 어디에서도 찾을 수 없다. 하나의 지갑에는 단 하나의 프라이빗 키만이 존재한다. 프라이빗 키와 이 안의 코인 정보는 전 세계에 퍼져 있는 블록체인 네트워크에 암호화되어 저장된다.
  • 암호화폐 지갑이란 이 블록체인 장부를 간편하게 보고, 프라이빗 키를 저장해 두어 입출금을 하기 위한 도구이다. 즉 은행과 다르며 코인매니저가 CM지갑을 운영하지만, 사용자의 돈과, 보유 코인정보들은 코인매니저 회사에 보관되는 것이 아닌 블록체인 네트워크에 저장되어 있고 CM 지갑은 이를 간편하게 관리할 수 있게 도와줄 뿐이다.[1]

이그드라시 키스토어

  • 알고리즘
키 알고리즘은 ECDSA secp256k1 알고리즘을 사용하고, 개인키는 32바이트, 공개키는 65바이트, 서명값은 65바이트로 해시 알고리즘은 SHA3(KECCAK-256)을 사용하며, 32바이트 데이터를 출력한다. 주소는 공개키를 SHA3 해쉬한 값의에서 뒤로부터 20바이트를 사용하며, 주소 표기는 0x로 시작하고 20바이트 주소값을 핵사값으로 표기한다. ex) 0x056a8143fdc7416a9b8d59cb4196930588731e9b
  • 키 암호화 비밀번호
개인키를 암호화하는 알고리즘은 AES/CBC/PKCS7Padding로 패스워드 기반 유도 알고리즘은 PBKDF2 이고, 32바이트의 대칭키(AES)가 유도된다. 패스워드 길이는 12 ~ 32자리 이고, 1자 이상의 대문자/소문자/숫자/특수기호를 각각 포함해야하며, 특수기호는 아스키(ASCII) 코드표에서 출력가능한 문자(0x21-0x2F, 0x3A-0x40, 0x5B-0x60, 0x7B-0x7E)만 허용된다.
  • 키 파일 : 키파일은 IV(Initialization Vector)16바이트 와 암호화된키값 48바이트로 구성되며, 설정파일에 지정된 디렉토리와 파일명으로 저장된다.
  • 암호화 구조
  • 클라이언트 키스토어 : 클라이언트에서 KDF는 스크립트, Encryption은 aes-256-cbc를 기본으로 사용하며, PBKDF2의 옵션을 제공한다. 노드와 차이점 으로는 다음과 같다.
노드와 차이점
이름 클라이언트 노드
kd PBKDF2, SCRYPT(option) PBKDF2
encrypte aes - 128 - cbc, aes -256 cbc(option) aes - 128 - cbc
  • KDF 알고리즘 비교
  • 비크립트(bcrypt) : 비크립트는 애초부터 패스워드 저장을 목적으로 설계되었으며, 닐스 프로보스(Niels Provos)와 데이비드 마지 에르(David Mazières)가 1999년 발표했고 현재까지 사용되는 가장 강력한 해시 메커니즘 중 하나이며, 비크립트는 보안에 집착하기로 유명한 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되고 있고, PBKDF2보다 더 경쟁력이 있다.
  • PBKDF2 : 가장 많이 사용되는 키 도출 기능은 PBKDF2(Password-Based Key Derivation Function)이다. 해시 함수의 컨테이너인 PBKDF2는 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있고, PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.
키 암호화
DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
PRF: hmac-sha256
Password
Salt: keccak256(password)
c: 262144
DLen: 32B

AES(128b), CBC, PKCS7 Padding
클라이언트 DB 구조
{
 "accounts": [
   {
     "address": "97995C6B3067764F1Fa3972814331df80004c9d7",
     "encryptedKey": "6a30d30e2d4fb11f9524214bf98d5648d888f1280b624b6148bf02f0866039e7b5c636410e960f97589a5da703c9a264",
     "iv": "f96fedb017c9e51f1056e6ee1a526711",
			"kdfParams": {
       "dklen": 32,
       "salt": "fa3a56b2c27740bd1b22a107288bcd989261b7f88e16051e4e5f043e21440524",
       "c": 4000,
       "prf": "hmac-sha256"
     }
   }
  ]
}
클라이언트 키 파일 사양구조
{
 "address": "d21307c7c57320dfd21fb805f18c70a1a8b2f1c5",
 "crypto": {
   "cipher": "aes-128-cbc",
   "cipherparams": {
     "iv": "2a8908f116079b804f1bc4e46181db92"
   },
   "ciphertext": "35f62f87336d51a63047230074de88d00ab334684cbb5909a9d1c0ee37a34ac5e40e0da858f0b7d021d85e67c4066e55",
   "kdf": "pbkdf2",
   "kdfparams": {
     "c": 262144,
     "dklen": 32,
     "prf": "hmac-sha256",
     "salt": "3c1c0475ae162df514856769f0050c0a879013c31c6dff871d86d21111050298"
   },
   "mac": 틀:글자색"60d2321155dab16e1d73753669fdbb21ea9b65030996994559a52dcd653f51b1"
 }
}
  • 스크립트(scrypt) : 스크립트는 PBKDF2와 유사한 적응 형 키 도출 기능 이며 콜린 퍼시발(Colin Percival)이 2012년 9월 17일 설계했다. 스크립트는 다이제스트를 생성할 때 메모리 오버헤드를 갖도록 설계되어, 억지 기법 공격(brute-force attack)을 시도할 때 병렬화 처리가 매우 어렵워 PBKDF2보다 안전하다고 평가되며 비크립트에 비해 더 경쟁력이 있다. 스크립트는 보안에 아주 민감한 사용자들을 위한 백업 솔루션을 제공하는 타스냅(Tarsnap)에서도 사용하고 있으며, 여러 프로그래밍 언어의 라이브러리로 제공받을 수 있다. PBKDF2와의 차이점이라면, PBKDF2는 가벼운 알고리즘으로써 모든 기기에 구현 가능하다는 장점이 있지만, 이 장점이 역으로 공격자가 가볍게 수백, 수천개의 병렬 연산으로 무차별 대입 공격을 가능하게 할 수 있다.
키 암호화
DIGEST = scrypt(Password, Salt, N, r, p, DLen)
Password
Salt: randomBytes(32B)
N: 262144
r: 8
p: 1
DLen: 32B

AES(512b), CBC, PKCS7 Padding
클라이언트 DB 구조
{
 "accounts": [
   {
     "address": "8370416C75C48f4e26B84CDD79D57f7b629E861E",
     "encryptedKey": "efb8a91edbd2518a64774f9074781b6d8f8bfa2ff47bba8bd31faf437f87b8f3442cdb24b80d79fca6bdb2ff1497d2fc",
     "iv": "8b135a3c533aeffff4babbc3052c9120",
     "kdfParams": {
       "dklen": 32,
       "salt": "37e9b309d6ff35df9745386df5979353541e41a1ccc84ebf5b0b78bda7e336bc",
       "n": 4096,
       "r": 8,
       "p": 1
     }
   }
  ]

}


각주

  1. 1.0 1.1 키스토어가 무엇인가요?〉, 《미디엄》

참고자료

같이 보기


  의견.png 이 키스토어 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.