Как внедрить / использовать безопасную локальную систему доступа к файлам с возможностью однократного чтения? - PullRequest
1 голос
/ 14 сентября 2009

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

Это мои требования:

Я хочу сохранить «защищенный / зашифрованный» файл данных на USB-накопителе (может быть только для чтения CD / DVD, но лучше для чтения / записи USB или даже на дискете) и иметь этот файл, пригодный для чтения один раз (и, главным образом, только один раз), на декодированной блочной основе, после ввода пароля. Содержимое файла, вероятно, представляет собой базовый текст / xml (или текстовые данные) и должно читаться главным образом как последовательный поток. Данные (в идеале) могут быть прочитаны обычными методами доступа к файлам Windows, а именно: STD-файл, объекты FSO (потоковый и текстовый файл), все методы обработки файлов BASIC PC (VB6 / VB.NET), даже текст Excel (импорт ). да, я знаю, что это, вероятно, побеждает объект (поскольку такой файл может быть открыт / сохранен), но я все еще хотел бы такую ​​возможность. Наконец, как только критерии «доступа» будут выполнены, устройство будет препятствовать дальнейшему доступу.

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

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

  • разрешает открывать 'n'
  • с несколькими паролями 2 или более пользователей, действующие индивидуально
  • silo-пароли, когда еще 2 пользователя подписываются вместе, чтобы получить доступ (или даже имея по крайней мере n из m пользователей, подписанных вместе, чтобы получить доступ)
  • Запрос пароля должен быть дан при первом доступе к блоку, независимо от приложение, вызывающее первый блок
  • Пароль может быть встроен / автоматический
  • привязать доступ к номинированному номеру машины / mac / ip / disk (или другой машинный код)
  • привязать доступ к назначенной программе / приложению
  • , если возможно, удалить и надежно перезаписать файл данных

Мое первое предположение при этом предполагает, что ему понадобится драйвер «psuedo-device», который появится как расширение (или замена) драйвера съемного устройства std. Драйвер будет обрабатывать каждый файловый блок, сектор за сектором и отказывать серверу в дальнейшем декодировать блоки, если он не авторизован. Устройство не должно давать нормальные списки каталогов, но пользователю может предоставляться некоторая некоторая форма краткого содержания (необязательно).

В отличие от системы DRM, я не хочу какой-либо формы онлайн-доступа / аутентификации (но хотел бы рассмотреть это), я бы предпочел автономную систему.

Я искал долго и упорно для такого устройства / системы, и не нашли его еще нет. Большинство устройств и системных инструментов (например, Iomega / ironkey), по-видимому, разблокируют доступ к файлам, но без ограничений, например: read-many, после разблокировки.

Производительность не является проблемой. Медленная скорость чтения с гибкого диска будет в порядке. Метод шифрования является независимым, все, что достаточно сильное 40bit + (128bit) было бы хорошо. Я не могу сказать вам, что это за данные или для чего они нужны, мне просто нужен способ дать кому-то данные и по возможности ограничить их использование и то, что они могут с ним сделать. Это реальное требование для защиты конфиденциальных данных и не предназначено для DRM или MP3 / видео или аналогичного.

Я «офисный» разработчик и не очень знаком с драйверами устройств или DRM. Теперь, с чего бы мне начать с такого проекта? Есть ли что-нибудь уже доступное для joe-public?

Спасибо - Тим.

PS: обновление

Я должен отметить, что я просто хочу передавать данные между нами и одним конкретным назначенным поставщиком услуг. Я не хочу, чтобы они копировали данные, которые мы предоставляем. Он будет использован один раз для поддержки «единственного» одноразового процесса, а затем будет завершен. Поскольку данные «передаются / читаются», они должны быть «использованы». если процесс завершится неудачей, мы повторно предоставим данные поставщику услуг. данные остаются в нашей собственности, они не продаются / не лицензируются.

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

PPS: это реальное требование ... Что бы вы сделали?

Судя по положительным ответам на @eriksons вдумчивый ответ, вы, ребята, говорите «невозможно / не беспокойтесь», но кроме личного контроля за тем, что данные используются в соответствии с нашими пожеланиями, что бы вы сделали?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2009

Резюме: это нереальное решение. Переосмыслите процесс так, чтобы «однократное чтение» не было необходимым.

В конце 90-х годов несколько компаний (на ум приходит Disappearing Inc., у которых был хотя бы один конкурент) пытались создать «саморазрушающуюся» электронную почту на оборудовании общего назначения. Они потратили миллионы долларов dot.com на разработку систем, которые на самом деле не работали.

Единственное известное мне потенциальное решение - это использование Trusted Platform Module. Они довольно распространены, так как они требуются на всех компьютерах, купленных правительством США. Однако их возможности различаются. Вам понадобится тот, который поддерживает нечто, называемое удаленной аттестацией, которая позволяет программному обеспечению выполнять проверки целостности самостоятельно. С помощью этой возможности вы можете написать программное обеспечение, которое будет обеспечивать вашу политику уничтожения данных. Однако я не думаю, что эта функция широко используется. Мой ноутбук имеет TPM, но он не поддерживает это.

Вы также должны знать, что существует большая враждебность по отношению к «доверенным вычислениям», потому что они могут использоваться для ограничения функциональности машины. Это нарушает право делать со своим имуществом все, что угодно. TPM могут иметь смысл для корпоративных или государственных машин, но не для персональных компьютеров.

Другие аспекты вашей проблемы, такие как предоставление нескольким пользователям доступа к данным, требующие, чтобы несколько пользователей получили доступ к данным, стали проще.

Шифрование данных для нескольких пользователей обычно достигается путем генерации ключа, шифрования данных с помощью этого «ключа шифрования содержимого», а затем шифрования ключа (который является относительно небольшим) с помощью «ключа шифрования ключа» (который может быть паролем). ) принадлежность к каждому предполагаемому получателю.

Требование к определенному количеству пользователей ввести пароль может быть безопасно выполнено с помощью Shamir Secret Sharing, , как я узнал здесь на SO.


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

В таком случае я вижу только законное решение. Запретить хранение ваших данных в договоре. Если стоит подать в суд на них за нарушение контракта, сделайте это.

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

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

1 голос
/ 14 сентября 2009

Есть несколько проблем с вашим подходом.

  1. Если вы можете прочитать данные из любого приложения, вы можете сохранить данные в любом месте. Я бы подумал, что это противоречит цели любой политики «только один доступ».
  2. Чтобы драйвер устройства мог справиться с вашим сценарием, вам потребуются глубокие знания в области программирования файловой системы, что, по крайней мере, под Windows - нелегкое дело. Даже тогда было бы трудно обеспечить предварительное условие одноразового доступа.
  3. Программы имеют разные стратегии доступа к файлам, которые могут нарушить ваши предположения. Например. приложение может открыть файл один раз, чтобы получить его размер, а затем закрыть и снова открыть его, чтобы загрузить свои данные. Как это должно быть обеспечено? Вы хотите ограничить звонки OpenFile? Вы хотите ограничить вызовы "read byte"? Вы хотите ограничить ... прыжки в файле?
  4. Когда ваш носитель копируется любым способом, у вас нет возможности узнать это. Игровая индустрия пытается связать игру с оригинальным CD годами, но годами терпит неудачу.

Я думаю, что было бы возможно, был бы контейнерный формат с кодировщиком / декодером или что-то в этом роде. (См. Bitlocker в Windows7) Это гарантирует, что вы можете декодировать данные только один раз на локальный диск, а затем удалите контейнер на вашем носителе (будьте осторожны, сначала проверьте, доступен ли носитель для записи, и привяжите контейнер к последовательному номер или имя носителя, чтобы контейнер не мог быть скопирован).

Другая возможность - это отдельное USB-устройство, которое вы можете использовать только один раз для извлечения данных из него. Тогда вам нужно будет только один раз написать драйвер в пользовательском режиме с WinUSB. Зашифрованные USB-флешки используют этот подход.

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

...