Самое простое решение:
- кодировать секретную фразу в одно или несколько чисел, и
- затем поделитесь каждым из этих номеров, используя схему обмена секретами.
На самом деле, если ваша секретная фраза хранится на компьютере, то о первой части уже позаботились: компьютеры обычно хранят данные, включая текст, в виде последовательностей 8-битных байтов, то есть чисел от 0 до 255.
Пока вам не нужно генерировать более 255 долей любого секрета, вы можете просто рассматривать эти байты как элементы GF(28) и поделиться ими с помощью Схема обмена секретами Шамира (или любую другую подобную схему обмена секретами, которую вы предпочитаете).
Вы можете даже безопасно использовать тот же идентификатор общего ресурса (т.е. $х$ координата) для каждого байта общей фразы, так что ваши общие ресурсы будут только на один байт длиннее, чем секретная фраза. (Однако это будут случайные двоичные данные, поэтому вам может понадобиться, например, Base64 кодировать их для передачи в виде текста.) И обмен секретами Шамира через GF(28) можно сделать очень быстро, так как вся математика выполняется с использованием всего одного байта. По этим причинам довольно много реализаций обмена секретами Шамира делают именно это.
Описанный выше метод побайтового обмена имеет несколько недостатков:
Он показывает длину секретной фразы в байтах. Если это проблема, фраза должна быть каким-то образом обратимо дополнена до фиксированной длины, прежде чем поделиться.
По математическим причинам (т. е. потому, что для каждой доли требуется отдельный ненулевой элемент поля в качестве ее $х$ координата) это нельзя использовать для создания более 255 отдельных акций за каждый секрет. Если этого недостаточно, вы можете, например. разделить долю на пары байтов и поделиться ими, используя схему Шамира через GF(216) до 65535 акций, или разделить его на группы по четыре байт и делиться ими через GF(232) примерно на 4 миллиона акций.
(Конечно, вы могли бы использовать даже большие размеры поля или даже размеры, которые не являются степенью двойки, если хотите. Но, как правило, мало причин для этого, по крайней мере, при совместном использовании двоичных данных, которыми в конечном счете являются все данные, хранящиеся на двоичном компьютере.)
Конечно, если вы не настаиваете на идеальной теоретико-информационной безопасности, другим практическим вариантом является создание случайного ключа (например, 128 или 256 бит) для схемы симметричного шифрования, такой как АЕС,* зашифруйте свой секрет с помощью ключа, а затем поделитесь ключом.
Это может быть выгодно, если ваш фактический секрет очень длинный (скажем, видеофайл) и если вы можете опубликовать зашифрованный секрет на каком-то общем канале, с тех пор единственное, что вам нужно будет отправить отдельно каждому акционеру, это их доля ключ (длиной всего несколько байт).
*) Использование безопасного режим работы, конечно. Я обычно рекомендую аутентифицированное шифрование например, SIV, но даже классического режима без аутентификации, такого как CBC или CTR, может быть достаточно для ваших нужд. Только не используйте ЭЦБ.