{rmonocypher} provides a simple, high-level interface for easily
encrypting R objects using a strong, modern cryptographic technique.
The key use-case this package addresses:
I want to easily encrypt and save data to a public location
(e.g. shared drive, cloud drive, etc) which only I can decrypt.
decrypt()/encrypt()read/write encrypted R objects to fileargon2()derives encryption keys from passwordsrbyte()generates secure random bytes using your operating system’s CSPRNG.
- Cryptographic primitives are provided by the included
monocypherlibrary (v4.0.2) - Encryption method is XChaCha20-Poly1305 which combines ChaCha20 stream cipher (extended nonce variant) with Poly1305 message authentication.
- Encryption process follows RFC 8439 ‘Authenticated Encryption with Additional Data (AEAD)’
- Key derivation uses Argon2 password-based key derviation.
- All random bytes are sourced from Cryptographically secure pseudo-random number generators (CSPRNG).
This package can be installed from CRAN
install.packages('rmonocypher')You can install the latest development version from GitHub with:
# install.package('remotes')
remotes::install_github('coolbutuseless/rmonocypher')Pre-built source/binary versions can also be installed from R-universe
install.packages('rmonocypher', repos = c('https://coolbutuseless.r-universe.dev', 'https://cloud.r-project.org'))Encrypt any R object and save to file.
encrypt(mtcars, dst = "SharedDrive/mydata.dat", key = "mykey")Then decrypt the object using the same key.
decrypt(src = "SharedDrive/mydata.dat", key = "mykey")For more details on how passwords are used to derive encryption keys, and for other ways of supplying and generating keys see the Vignette: Encryption Keys.
- Encryption
Keys
- Generating encryption keys from passwords with
argon2() - Using random bytes as the encryption key
- Using hexadecimal string as the encryption key
- Generating encryption keys from passwords with
- Technical
Notes
- Background on the encryptiong techniques used
- Using Additional
Data
- Advanced technique which is not needed for regular use of this package.
- Details on using additional data
- Worked example