일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python
- Docker
- 제어의역전
- JavaScript
- Ethereum
- ethers
- erc
- github
- server
- truffle
- 스마트 컨트랙트
- 블록체인
- solidity
- ERC165
- erc721
- tcp
- web3.js
- 트랜잭션
- ERC20
- 이더리움
- web3
- web
- MySQL
- 솔리디티
- git
- Programming
- geth
- blockchain
- 네트워크
- NFT
- Today
- Total
멍개의 연구소
[ethereum] keystore 파일에 대해서 본문
이더리움에서 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를 포함하여 이름을 생성합니다.
· 내용
파일 내용의 경우는 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로 서명할 준비가 됩니다.
'블록체인' 카테고리의 다른 글
[ethereum] solidity - address 관리방법(address, address payabl 타입) (0) | 2022.08.27 |
---|---|
[ethereum] solidity - call, delegatecall (0) | 2022.08.27 |
[ethereum] block, transaction pool, state 각각 어디에 저장되는가 (0) | 2022.08.27 |
[ethereum] python으로 ethereum address 생성구현 (0) | 2022.08.27 |
[gpg] gpg를 이용하여 RSA(공개키 암호화)방식 이해 (0) | 2022.08.27 |