
안녕하세요. 안피곤입니다.
ECDSA는 암호화폐에 가장 많이 사용되는 암호화 알고리즘입니다. 그리고 RSA 보다 성능이 더 좋다고 알려져 있습니다. 그리고 JWT(JSON Web Token)은 보안 및 인증에 가장 많이 사용되고 있습니다. 이 2개를 가지고 토큰을 생성하고 인증 하는 방법을 구현합니다.
보통은 JWT 생성에 SHA 해시 알고리즘을 사용하는 HMAC을 사용합니다. 이것은 단방향 암호화 방식입니다. 하지만 ECDSA를 사용하면 비대칭키를 사용하기 때문에 부인 방지 및 메세지 인증을 처리 할수 있습니다. 참고로 부인은 여러분이 생각하는 그 부인은 아닙니다.
구현을 위해선는 아래 두 라이브러리가 필요합니다.
1 | const jwt = require("jsonwebtoken"); |
참고:
https://www.npmjs.com/package/jsonwebtoken
https://www.npmjs.com/package/ecdsa-secp256r1
ECDSA 키 생성
1 | const privateKey = ECDSA.generateKey() |
ECDSA 서명 하기
1 | const message = { text: 'hello' } |
ECDSA 서명 검증
1 | const key = 'A+GHVCISA53FbubUnII8bYYlzjv3pddRVm+eoEd6p4VU' |
JWT 토큰 생성하기
ES256는 P-256 곡선과 SHA-256 해시 알고리즘을 사용하는 ECDSA입니다. 다른 알고리즘은 여기 문서를 참고하세요.
1 | const privateKey = fs.readFileSync('private.key'); // or privateKey.toPEM(); |
JWT 토큰 검증하기
1 | const publicKey = publicKey.toPEM(); |
# JWT 토큰 복호화하기
jwt 토큰 복호화 하여 내용을 확인합니다.
1 | const decodedToken = jwt.decode(jwtToken, { algorithm: 'HS256' }); |
해피 코딩하세요~!