Держите вещи простыми для начала. Если вам нужно больше сложности или более надежная защита, сделайте это после того, как вы разработаете базовую структуру.
Первый шаг. Посмотрите на некоторые простые алгоритмы шифрования, такие как Tiny Encryption Algorithm. Освойтесь с шифрованием и дешифрованием файла с помощью одного ключа.
http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm
Следующий шаг. Вам понадобится много ключей, база данных для их хранения и какой-то идентификатор клиента, чтобы с ними связать. Для начала предположим, что идентификатор клиента представляет собой 6-значное число, начинающееся с 100000, ключ имеет длину 128 бит в шестнадцатеричном формате, а база данных представляет собой простой текстовый файл. На этом этапе у вас не должно возникнуть проблем с созданием программы для генерации пакета ключей для следующих 100 клиентов.
Третий шаг. Теперь у вас есть база данных, поэтому настройте несколько сценариев или приложение, чтобы вы могли зашифровать определенный файл, создав несколько копий, по одной для каждого идентификатора клиента, зашифрованных их ключом.
Четвертый шаг: напишите короткое простое приложение, которое берет файл, расшифровывает его с помощью ключа, затем загружает и запускает полученный исполняемый файл. После завершения работы приложения удалите расшифрованный файл.
Теперь маленькое приложение, которое расшифровывает и работает, должно каким-то образом создаваться в многочисленных версиях, по одной для каждого клиента с его ключом. Лучший способ сделать это — сгенерировать случайное число того же размера, что и ключ, и поместить его как константу в код. Затем скомпилируйте его. На этом этапе такой инструмент, как grep, может найти, где он находится в исполняемом файле. Напишите еще одно небольшое приложение для чтения в приложении-расшифровщике, замените тег реальным ключом и напишите версию расшифровщика, которую вы будете распространять с соответствующим расшифрованным приложением.
После этого вы, возможно, захотите взглянуть на алгоритмы дешифрования лучше, чем TEA, но не используйте что-то слишком сильное, что противоречит законам об экспорте.
Обратите внимание, что ничто из этого не помешает решительным ворам, но должно защитить от случайных, и вы многому научитесь. Лучшая безопасность может быть достигнута с приложением, которое хранит важные части себя на зашифрованном USB-ключе, чтобы на жестком диске никогда не было расшифрованной копии. И помните, каждый раз, когда вы думаете, что нашли способ улучшить шифрование или защиту кода, вы, скорее всего, ошибаетесь. Гораздо более великие умы, чем наши, посвятили всю свою жизнь изучению шифрования, и общее правило состоит в том, что, когда вы немного отклоняетесь от общепринятых алгоритмов и способов использования, вы в конечном итоге снижаете, а не повышаете безопасность.
person
Michael Dillon
schedule
17.10.2009