message: 암호화할 대상
nonce: 24byte random key
message
24/32B
Key
Secretbox
var encMsg=nacl.secretbox(nacl.util.decodeUTF8("다시만난세계"),
nonce=nacl.randomBytes(24),
documentKey=nacl.randomBytes(32)
);
nacl.util.encodeUTF8(nacl.secretbox.open(encMsg, nonce, documentKey))
> 다시만난세계
첫번째 인자로 8bit array(Javascript기준 Uint8Array)를 넘기기 위해 nacl.util.decodeUTF8 을 사용합니다.
nacl.secretbox로 암복호화하는 것은 간단합니다.
다만 nonce와 documentKey를 외부 공격으로 탈취당했다면 쉽게 해독할 수 있는 점이 문제이므로 필요한 대상에게만 nonce/documentKey를 전달해야합니다.
encryptedMessage
message
symnonce
documentKey
MessagesPrincipal
symnonce
documentKey
encryptedPrivateKeys
secretbox
asymnonce
publicKey
privateKey
box
asymnonce
userId
privateKey
publicKey
UsersPrincipal
symnonce
privateKey
publicKey
userId
PrivateKeyPass
keyPair
secretKey
publicKey
symnonce
passwordKey-32byte
password
(32-password)Rnd
secretKey
nonce
passwordKey
secretbox
UsersPrincipal
symnonce
documentKey
encryptedPrivateKeys
asymnonce
publicKey
privateKey
box
asymnonce
userId
privateKey
publicKey
addedPasswordBytes
encryptedMessage
message
symnonce
documentKey
secretbox
nacl.secretbox.open하려면
symnonce와 documentKey
필요.
decrpytedMessage = nacl.secretbox.open(encryptedMessage, symnonce, documentKey)
MessagesPrincipal
symnonce
documentKey
encryptedPrivateKeys
asymnonce
publicKey
privateKey
box
asymnonce
userId
privateKey
publicKey
messagesPrincipal에
symnonce와 documentKey가 있다.
MessagesPrincipal
symnonce
documentKey
encryptedPrivateKeys
asymnonce
publicKey
privateKey
box
asymnonce
userId
privateKey
publicKey
symnonce는 바로 쓰면 되지만 documentKey는 encryptedPrivateKeys의 key로 encrypt 되있음
MessagesPrincipal
symnonce
documentKey
encryptedPrivateKeys
asymnonce
publicKey
privateKey
box
asymnonce
userId
privateKey
publicKey
nacl.box로 nonce와 keyPair(privateKey, publicKey)조합인데 asymnonce는 encryptedPrivateKey에
privateKey는 messagesPrincipal에 있음
publicKey만 구하면 됨.