관리 메뉴

멍개의 연구소

[ethereum] keystore 파일에 대해서 본문

블록체인

[ethereum] keystore 파일에 대해서

멍개. 2022. 8. 27. 16:14

이더리움에서 account를 관리하는 방법은 여러가지 방법이 있습니다.

1. private key
2. keystore
3. mnemonic

실질적으로 우리는 private key만 있으면 되는데 private key가 노출되면 보안상에 매우 취약하므로 이를 대신해서 keystore(키스토어 파일) 또는 mnemonic(니모닉)의 형태로 대신 저장합니다.

이번글에서는 파일형태로 저장되는 keystoer 파일에 대해서 알아보겠습니다.

여기서 private key가 중요한 이유는 transaction을 발생시킬 때, transaction을 발생시키는 address의 private key로 서명을 해야하기 때문에 매우 중요.

● 구조

keystore 파일은 이름과 내용이 특정 패턴에 의해서 생성됩니다.

· 이름

keystore 파일의 이름은 생성 시간과 address를 포함하여 이름을 생성합니다.

UTC-{생성시간}-{address}

· 내용

파일 내용의 경우는 private key를 만들기 위해 암호화된 데이터들을 포함합니다.

 
{
   "id":"bf74fcc7-8027-2c9d-b5d4-d65451fdfa35",
   "version":3,
   "crypto":{
      "cipher":"aes-128-ctr",
      "cipherparams":{
         "iv":"059a40c98c81630c2bc9e0cd861d0a16"
      },
      "ciphertext":"05fb430f572da8d3072571d46784435fe58843919310efc083c0fb19431bf3a7",
      "kdf":"pbkdf2",
      "kdfparams":{
         "c":10240,
         "dklen":32,
         "prf":"hmac-sha256",
         "salt":"5dda813abd2b60ec414f89ecafeb50225e88ff858a4ead8652ef2eacd026be89"
      },
      "mac":"8bac7c1e8b98dc1fe37d73430266a6c96586b90dec757f7cd28064702c446536"
   },
   "address":"1c0e607bb9d657a7a4389a236b81a658a3f3b431",
   "name":"",
   "meta":"{}"
}

keystore 파일을 열어보면 앞의 내용처럼 나타나게 되는데 크게 id, version, crypto, address, name, meta 속성으로 이루어져 있습니다.

crypto 내부에 있는 정보에 대해서 자세히 알아보겠습니다.

● crypto 속성

crypto는 cipher, cipherparams, ciphertext, kdf, kdfparams, mac으로 이루어져 있습니다.

· cipher

chiper는 AES(대칭 키 알고리즘) => 사용된 알고리즘은 aes-128-ctr

· chipherparams

AES에서 필요한 매개변수. 여기서 iv는 "초기화 벡터" 입니다.

· chiphertext

AES(대칭 키 알고리즘)으로 암호화 시킬 데이터

· kdf

키를 유도하는데 사용하는 함수(해독하기 위해 필요한 값) => 키 유도 함수(key derivation function

· kdfparams

kdf시 필요한 매개변수

· mac

암호를 확인하기 위해 사용되는 코드

keystore 파일은 private key를 단순한 형태로 저장하는 것이 아닌 password로 암호화 하여 저장하는 방법이며 입력한 비밀번호를 검증하는 내용을 포함한 파일입니다.

● 시나리오

· private key 생성

cipherparams와 aiphertext를 cipher에 정의된 알고리즘으로 암호화 합니다. 여기서 나온 결과는 암호화된 private key 입니다. keystore 파일은 private key를 암호화된 형태로 관리됩니다.

· 비밀번호로 보호

앞에서 private key를 암호화 된 형태로 관리하기 때문에 해독에 필요한 해독 키를 사용합니다. 참고로 여기서 해독을 해야하는 이유는 해독한 후 keystore 파일을 생성할 때 입력한 비밀번호화 해독된 데이터를 SHA3-256으로 해싱한 후 mac과 같으면 정상적인 비밀번호다라고 private key를 받을 수 있습니다.

kdf와 kdfparams를 이용하여 해독할 수 있는 키를 생성합니다.

여기서 해독된 결과를 주지않고 해독키만 반환하는 이유는 private key를 반환해버리면 keystore 파일만 가지고 해당 과정까지만 해서 private key가 노출되기 때문입니다.

· 검즘

kdf로 해독 키를 받아온 후 입력한 비밀번호화 SHA3-256 알고리즘으로 해싱을 한 후 같으면 정상적으로 private key로 서명할 준비가 됩니다.

Comments