Meteor를 이용한 종단간(End-to-End)

암호화 사례

TweetNacl

Encrypt/Decrypt

nacl.secretbox
(message, nonce, documentKey)

nacl.secretbox
(message, nonce, documentKey)

message: 암호화할 대상

nacl.secretbox
(message, nonce, documentKey)

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를 전달해야합니다.

자매품

nacl.box

public-key authenticated Encryption

nacl.box
(message, nonce, privateKey, publicKey)

Principals

publicKey 공개키 암호화

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

Decrypt(복호화) 과정

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만 구하면 됨.