일반적인 단어로 표현되는 니모닉 코드는 암호화폐 지갑 사용자가 난해한 기술에 대한 이해 없이도 지갑을 편리하게 사용할 수 있도록 돕는다.
ex. 메타마스크, Kaikas
블록체인에서 니모닉(Mnemonic)은 지갑을 복구하기 위한 일반적인 단어들의 조합을 뜻합니다.
사전적 의미로는 정보의 기억을 위한 기억술입니다. 숫자의 나열처럼 직관적인 관계가 없어 외우기 어려운 정보에 다른 정보를 연결하여 외우기 쉽도록 하는 데 쓰입니다.
암호화폐 지갑은 비대칭 키 암호 방식
을 사용합니다. 그래서 공개 키와 비밀 키가 사용이 되는데, 이 비밀 키를 사람이 쓰기 편하게 만들어진 것이 바로, 니모닉(mnemonic)입니다. (공개키는 계좌처럼 사용되고 비밀키는 누구에게도 공개하면 안된다.)
암호화 알고리즘 보안 성능은 2^256(2의 256승)을 활용하여 직접사용하기에는 사람으로서는 불가능하므로 좀 더 쉬운 단어들의 조합으로 활용했다고 생각하면 쉽다.
실제로 eth-lightwallet 모듈
을 이용하여 간단한 Mnemonic Wallet을 개발하고, Postman을 사용하여 API 테스트를 진행하는 것을 목표로 했다.
서버는 express로 생성, eth-lightwallet모듈로 지갑 생성, fs모듈을 사용해 keystore저장, npm으로 진행하였음.
newMnemonic
API 만들기 (시드구문 만들기)router.post("/newMnemonic", async (req, res) => {
let mnemonic;
try {
mnemonic = lightwallet.keystore.generateRandomSeed(); // 함수 실행후 랜덤된 12개 단어배열 얻음
res.json({ mnemonic });
} catch (err) {
console.log(err);
}
});
"mnemonic": "sadness vacuum rail meadow curtain retire trap ocean nominee nerve logic offer”
router.post('/newWallet', async(req, res) => {
let password = req.body.password
let mnemonic = req.body.mnemonic;
try {
lightwallet.keystore.createVault(
{
password: password,
seedPhrase: mnemonic,
hdPathString: "m/0'/0'/0'"
},
function (err, ks) {
ks.keyFromPassword(password, function (err, pwDerivedKey) {
ks.generateNewAddress(pwDerivedKey, 1);
let address = (ks.getAddresses()).toString();
let keystore = ks.serialize();
res.json({ keystore: keystore, address: address });
});
}
);
} catch (exception) {
console.log("NewWallet ==>>>> " + exception);
}
});
후에 postman으로 니모닉코드를 활용해 패스워드 지갑 주소를 얻음
https://github.com/HYOSEUNGAN/Mnemonic
니모닉 지갑에 코드를 하나 하나 해석하면서 부족한 부분을 많이 느꼈다. postman, node, express, 로컬 환경까지 좀 더 다양한 환경, 다양한 작업을 실행하면서 익숙해져야겠다. 기본에 충실하고 좀 더 탐구해보려는 자세가 개발자에겐 더욱 필요하고 그것이 내것이 된다는 것을 더욱 느끼는 프로젝트였다.
good