주소와 보안에 대해서

이 페이지는 비밀키와 전자서명에 대해서 설명하고 있습니다.

비밀키란 무엇인가

createAddress를 사용하여 새 서버 지갑이 생성되면 서버 지갑 서버에 새 개인 키가 생성되고 nemonic 및 secretKey가 주소와 함께 반환됩니다. nemonic은 저장한 후 importAddress를 사용하여 복원합니다. secretKey는 주소별로 생성되며 서버 지갑 서버에 안전하게 저장됩니다. 주소를 사용하여 서명 작업을 수행할 때 인증에 사용됩니다. 해시를 통해 생성된 hashKey(tempKey + "|" + secretKey)는 서버 지갑 서버에 저장된 secretKey와 배달된 tempKey를 사용하여 인증하기 위해 토큰 서버로 전송됩니다.

hashKey = CryptoUtil.getSah256(tempKey +"|" + secretKey)

어떻게 서명값을 생성하는지

create, transfer 등의 트랜잭션을 생성하는 API를 사용할 경우 서명을 생성하여 매개 변수로 전달해야 합니다. signature는 ServerWallet API의 signData를 사용하여 서명을 생성합니다. 예를 들어, 전송의 경우, "fromAddress | toAddress | mount | hashKey"로 만들어진 문자열을 sha256으로 해싱한 결과를 16진수 문자열로 만든 다음 signData의 데이터 매개 변수로 전달하여 시그니처 값을 생성한다.

String data = fromAddress + "|" + toAddress + "|" + amount + "|" + tempKey + "|" + hashKey;
log.debug("data=" + data);
String hashData = CryptoUtil.getSha256(data);
log.debug("hashData=" + hashData);
resultMessage = tokenApiService.signData(fromAddress, hashData, tempKey, hashKey);
...
public static String getSha256(String msg) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(msg.getBytes());
    byte[] mdBytes = md.digest();
    String mdStr = bytesToHex(mdBytes);
 
    return mdStr;
}

Last updated