Является ли функция дайджеста в R подходящей для анонимных идентификаторов участников?

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

Таким образом, если данные должны быть разделены в некоторой форме, очищенный идентификатор должен быть создан из предварительного идентификатора. Очищенный идентификатор должен быть лишен такой информации. Простой подход в R - это просто назначение последовательных чисел (например, df$id <- seq(nrow(df)), где df - это data.frame). Однако, если на начальном этапе исследования будет собрано больше данных или будут задействованы строки, это может вызвать проблемы. I.e., очищенный идентификатор, присвоенный данному участнику, может меняться каждый раз, когда обновляется исходный набор данных. Это, в свою очередь, может разорвать последующие анализы на очищенном наборе данных, который, например, может фильтровать случаи на основе очищенного идентификатора.

Таким образом, я думал о создании хэша с помощью функции digest в пакете digest.

df$id <- sapply(df$raw_id, digest)

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

Однако, учитывая, что я новичок в функции digest и хэшировании вообще, я хотел спросить:

  • Подходит ли digest для удаления идентификаторов идентифицирующей информации?
  • Существуют ли какие-либо проблемы при использовании digest для этой цели?

Ответ 1

Я узнал много полезных вещей из комментариев выше. Этот ответ направлен на устранение этих комментариев.

Существует два вопроса с хэшированием для целей анонимных идентификаторов участников исследования:

  • Дублирующие идентификаторы. Это, по-видимому, теоретическая, но не практическая проблема (возможно, особенно если вы используете sha1). Но я рад, что вас исправили.
  • Недостаток анонимности. Если вы знаете алгоритм хэширования и знаете формат id, и вы знаете точную информацию, составляющую идентификатор, то вы сможете определить, какой участник соответствует эта информация. Во многих случаях, когда формат не используется, информация участника неизвестна, или идентификатор использует информацию, которая практически непознаваема, то это действительно не проблема. Тем не менее, добавление некоторого текста пароля в идентификатор кажется простым решением для предотвращения этой проблемы.

Таким образом, чтобы обобщить рекомендации, которые я собрал.

library(digest)
hashed_id <- function(x, salt) {
    y <- paste(x, salt)
    y <- sapply(y, function(X) digest(X, algo="sha1"))
    as.character(y)
}

mydata$id <- hashed_id(mydata$raw_id, "somesalt1234")