Как защитить / зашифровать объекты R в файлах RData из-за EU-GDPR - PullRequest
0 голосов
/ 17 октября 2018

Я хочу защитить содержимое моих RData файлов с помощью надежного алгоритма шифрования, поскольку они могут содержать конфиденциальные личные данные, которые не должны раскрываться из-за (законных) требований EU-GDPR.

Как можноЯ делаю это изнутри R?

Я хочу избежать второго ручного шага для шифрования файлов RData после их создания, чтобы минимизировать риск его забывания или пропуска любых файлов RData.

Я работаю с Windows в этом сценарии ...

Ответы [ 3 ]

0 голосов
/ 17 октября 2018
library(openssl)

x <- serialize(list(1,2,3), NULL)

passphrase <- charToRaw("This is super secret")
key <- sha256(passphrase)

encrypted_x <- aes_cbc_encrypt(x, key = key)

saveRDS(encrypted_x, "secret-x.rds")

encrypted_y <- readRDS("secret-x.rds")

y <- unserialize(aes_cbc_decrypt(encrypted_y, key = key))

Вы должны иметь дело с управлением секретами (то есть ключом), но эта общая идиома должна работать (с чуть большей пуленепробиваемостью).

0 голосов
/ 27 июля 2019

Я знаю, что уже поздно, но зацените этот пакет. Endecrypt

Установка:

devtools::install_github("RevanthNemani\endecrypt")

Используйте следующие функции для шифрования столбцов:

airquality <- EncryptDf(x = airquality, pub.key = pubkey, encryption.type = "aes256")

Для дешифрования столбцов:

airquality <- DecryptDf(x = airquality, prv.key = prvkey, encryption.type = "aes256")

Оформить заказ Страница Github

Просто не забудьте сгенерировать ключи и сохранить их для первого использования.Загрузите ключи при необходимости и предоставьте ключевой объект для функций.

Например,

SaveGenKey(bits = 2048,
              private.key.path = "Encription/private.pem",
              public.key.path = "Encription/public.pem")

# Load keys already stored using this function 
prvkey <- LoadKey(key.path = "Encription/private.pem", Private = T)

Он очень прост в использовании, и ваши кадры данных могут храниться в базе данных или файле Rdata.

0 голосов
/ 17 октября 2018

Библиотека Rcrypt должна сделать свое дело.https://cran.r -project.org / веб / пакеты / rcrypt / index.html .См. Также http://brettklamer.com/work/rcrypt/

Простой способ избежать дополнительного ручного шага - создать новую функцию, которая бы одновременно выполняла как сохранение, так и шифрование.Может быть, что-то вроде этого:

saveEncrypted <- function(mydataframe, outfile, mypass){
    require(rcrypt)
    save(mydataframe, file=outfile)
    encrypt(as.character(file), output=paste(file,gpg,sep=.), passphrase=mypass)
}
...