Где я могу узнать об испытанных методах для совместного использования криптографических ключей?

Размер структуры больше, чем сумма ее частей из-за того, что называется упаковкой. У конкретного процессора есть предпочтительный размер данных, с которым он работает. Большинство современных процессоров предпочитают размер, если 32 бит (4 байта). Доступ к памяти, когда данные находятся на этом типе границы, более эффективен, чем те, которые охватывают эту границу размера.

Например. Рассмотрим простую структуру:

struct myStruct
{
   int a;
   char b;
   int c;
} data;

Если машина является 32-разрядной машиной, а данные выровнены по 32-битной границе, мы видим немедленную проблему (при отсутствии выравнивания структуры). В этом примере предположим, что данные структуры начинаются с адреса 1024 (0x400 - обратите внимание, что младшие 2 бита равны нулю, поэтому данные выравниваются с 32-разрядной границей). Доступ к data.a будет работать нормально, потому что он начинается на границе - 0x400. Доступ к data.b также будет работать нормально, поскольку он находится по адресу 0x404 - еще одна 32-разрядная граница. Но неуравновешенная структура поставит data.c по адресу 0x405. 4 байта данных.c находятся в 0x405, 0x406, 0x407, 0x408. На 32-битной машине система считывала data.c в течение одного цикла памяти, но получала бы только 3 из 4 байтов (четвертый байт находится на следующей границе). Таким образом, системе потребуется второй доступ к памяти для получения 4-го байта,

Теперь, если вместо того, чтобы поместить data.c по адресу 0x405, компилятор заполнил структуру на 3 байта и поместил данные. c по адресу 0x408, тогда системе потребуется всего 1 цикл, чтобы прочитать данные, сократив время доступа к этому элементу данных на 50%. Заполняет эффективность памяти для эффективности обработки. Учитывая, что компьютеры могут иметь огромные объемы памяти (много гигабайт), компиляторы считают, что своп (скорость над размером) является разумным.

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

С другой стороны, разные компиляторы имеют разные возможности для управления упаковкой структуры данных. Например, в Visual C / C ++ компилятор поддерживает команду #pragma pack. Это позволит вам настроить упаковку и выравнивание данных.

Например:

#pragma pack 1
struct MyStruct
{
    int a;
    char b;
    int c;
    short d;
} myData;

I = sizeof(myData);

Теперь я должен иметь длину 11. Без прагмы я мог бы быть чем угодно из 11 до 14 (а для некоторых систем - до 32), в зависимости от стандартной упаковки компилятора.

10
задан erickson 21 September 2008 в 22:16
поделиться

5 ответов

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

10
ответ дан 3 December 2019 в 22:03
поделиться

То, что Вы описываете, много походит "на секретное разделение" (Раздел 12.1. Введение в Cyptography. Trappe & Washington. 2-й редактор) основная идея - Вы, может придумать многочлен, который включает Ваш "секрет" (ключ) как точка на строке. Можно выделить "доли" путем выбора других точек на этом многочлене. Две точки определяют строку формы f (x) = топор + b, три точки определяют многочлен формы f (x) = ax^2 + основной обмен + c, и четыре точки определяют что-то вроде формы f (x) = ax^3 + bx^2 + cx + d и так далее. Можно выбрать многочлен, который включает секрет как точку и градус для многочлена, достаточного так, чтобы любые люди N могли восстановить его.

Это - основная идея, которая известна как "пороговая схема Shamir".

Посмотрите Википедию на Секретном Разделении, и Shamir Секретное Поделиться страницей Википедии имеет некоторые ссылки на реализации этой идеи, включая код GPL'd для Windows и UNIX.

4
ответ дан 3 December 2019 в 22:03
поделиться

Это легко реализовать с кодами с коррекцией ошибок. Вы могли использовать инструмент командной строки, такой как par2 (который точно не подходит для этой определенной цели btw, поскольку это генерирует блоки восстановления переменного размера). Скажем, Вы имеете (n+m) избирателей и хотите кворум голосов n. Вы генерируете n закрытые ключи K ₁∘, K ₂... Kn, и генерируют m дополнительные блоки ECC P ₓ того же размера. Тем путем любые n блоки достаточны для воссоздания шифра K ₁∘ K ₂∘... ∘Kn

1
ответ дан 3 December 2019 в 22:03
поделиться

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

1
ответ дан 3 December 2019 в 22:03
поделиться

Lotus Notes предоставляет практическую реализацию «паролей бункера», посредством чего доступ к какой-то ресурс (данные / информация / документ) заблокирован для `` общего идентификатора '' - идентификатор (часть сертифицированной системы PKI, я думаю, на основе RSA) настраивается с 2 или более (я думаю, до 16) индивидуальных паролей пользователей . Сертификат / администратор устанавливает схему, в соответствии с которой любое количество паролей из имеющихся или все пароли необходимы для «открытия» идентификатора для активного использования. Этот процесс обычно используется для блокировки сертификатов организации или подразделения для 2 из 5 или 3 из 5 администраторов / корпоративных сотрудников, предоставляющих доступ, и таким образом гарантирует, что использование / доступ сертификатов высокого уровня можно контролировать, а отсутствующий административный персонал избежать.

0
ответ дан 3 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: