Encryption Primer
When we specify that things need to be encrypted, it usually means we need
to keep those things secret. Encryption in this sense encompasses all the ways
to protect information, including public key encryption, cryptographic hashing,
digital signatures as well as all the things that support it such as security
certificates and key management.Working in a React Native, NodeJS/NPM, JS/ES6 environment, there are many more things to think about than simply calling the OS encryption library and feeling pretty good that's handled.
This page is meant to list the available options, applicability to various tasks and the supporting infrastructure required when you need to encrypt meaningful data. An important criteria in evaluating a crypto library is any validation or approval from a standards body. Anybody can implement and publish a npm crypto library, implementing standard cryptographic algorithms - but there is no guarantee with most that they are correctly done.
Here is a viewpoint on that from Bruce Schneier: https://www.schneier.com/essays/archives/1999/03/cryptography_the_imp.html
Platform
|
Library
|
Encryption
Algorithms
|
Cryptographic
Hash
|
Notes
|
Javascript
|
Stanford Javascript Crypto Library SJCL |
AES
128, 192, 256 bit
|
SHA256, HMAC |
Published, NSF Funded, NIST Approved (?) https://crypto.stanford.edu/sjcl/ |
Javascript
|
CryptoJS
|
AES
|
SHA256
|
No papers - no published validations https://www.npmjs.com/package/crypto-js |
Apple
iOS7, iOS8, iOS9
|
Apple
iOS CoreCrypto Module
|
AES,
|
SHA256
|
NIST
Approved
|
React Native |
React-native-crypto |
sha1, sha224, sha256, sha384, sha512, md5, rmd160 |
React Native library that implements Nodejs Crypto Module https://www.npmjs.com/package/react-native-crypto |
|
Android
|
JavaX
Crypto
|
Key Management
Very often the use of cryptography involves the use of secret keys of various sorts (passwords for instance). Key management is the process of keeping these secrets safe from prying eyes while using then to protect other secrets - for instance it's better to let a key-store system handle the key you use for AES encryption, rather than embedding it in your source code.
Node-jose is a javascript, node based key management library with good activity and implements JOSE (Javascript Object Signing and Encryption) on node, with many corollary client libraries for use in React Native - https://www.npmjs.com/package/node-jose
React-Native-Keychain is a library to access the mobile device's underlying keychain infrastructure on Android and iOS - https://github.com/oblador/react-native-keychain
Resources:
List of JS Crypto Libraries: https://gist.github.com/jo/8619441NIST Approved AES libraries: https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/Validation/Validation-List/AES
Comments