Схема за разделяне на тайна на Шамир

Нека разгледаме сценарий, при който трябва да осигурим сигурността на банково хранилище. То се счита за абсолютно недостъпно без ключа, който ви се дава в първия ден на работа. Вашата цел е надеждно да запазите ключа.

Да предположим, че решавате да държите ключа само при себе си, предоставяйки достъп до хранилището, когато е необходимо. Но бързо ще разберете, че подобно решение практично не е мащабируемо, тъй като за отваряне на хранилището е нужно физическото ви присъствие всеки път. А какво ще кажете за обещаните ви ваканции? Освен това, още по-плашещ е въпросът: а какво, ако загубите единствения ключ?

С мисъл за ваканцията, решавате да направите копие на ключа и да го доверите на друг служител. Въпреки това разбирате, че и това не е идеално. Удвоявайки броя на ключовете, вие също така удвоявате възможностите за кражба на ключа.

В отчаянието си, вие унищожавате дубликата и решавате да разделите оригиналния ключ на две. Сега, си казвате, двама доверени лица с фрагменти от ключа трябва физически да са присъствали, за да съберат ключа и да отворят хранилището. Това означава, че крадецът трябва да открадне два фрагмента, което е два пъти по-трудно от кражбата на един ключ. Но скоро разбирате, че тази схема не е много по-добра от просто един ключ, защото ако някой изгуби половината ключ, пълният ключ не може да бъде възстановен.

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

Как да разделим секрет

За такъв тип схема за управление на ключове е мислил Ади Шамир през 1979 година, когато публикува своята работа «Как да разделим секрет». В статията кратко се обяснява така наречената Схема за разделяне на тайна на Шамир прагова схема за ефективно разделяне на секретна стойност (например, криптографски ключ) на Схема за разделяне на тайна на Шамир части. След това, когато и само когато поне Схема за разделяне на тайна на Шамир от Схема за разделяне на тайна на Шамир части са събрани, може лесно да се възстанови секретът. Схема за разделяне на тайна на Шамир.

От гледна точка на сигурността, важно свойство на тази схема е, че нападателят не трябва да знае абсолютно нищо, ако няма поне Схема за разделяне на тайна на Шамир части. Дори наличието на Схема за разделяне на тайна на Шамир части не трябва да дава никаква информация. Ние наричаме това свойство семантична сигурност.

Полиномна интерполация

Схемата на Шамир Схема за разделяне на тайна на Шамир е изградена около концепцията на полиномната интерполация. Ако не сте запознати с тази концепция, всъщност тя е доста проста. Всъщност, ако някога сте рисували точки на графика и след това сте свързвали тях с линии или криви, вече сте я използвали!

Схема за разделяне на тайна на Шамир
Чрез две точки могат да се проведат неограничен брой полиноми от степен 2. За да изберем единствения от тях, е необходима трета точка. Илюстрация: Уикипедия

Нека разгледаме полином от степен едно, Схема за разделяне на тайна на Шамир. Ако искате да построите тази функция на графика, колко точки ви трябват? Ами, знаем, че това е линейна функция, която образува права линия и следователно е необходима поне две точки. След това разгледайте полиномиалната функция от степен две, Схема за разделяне на тайна на Шамир. Това е квадратична функция, така че за изграждането на графика са необходими не по-малко от три точки. А какво ще кажете за полином от степен три? Поне четири точки. И така нататък.

Наистина впечатляващото в това свойство е, че, вземайки предвид степента на полиномната функция и поне Схема за разделяне на тайна на Шамир точки, можем да извлечем допълнителни точки за тази полиномна функция. Екстраполацията на тези допълнителни точки наричаме полиномна интерполация.

Създаване на тайна

Може би сте разбрали, че тук влиза в игра умната схема на Шамир. Да предположим, че нашата тайна Схема за разделяне на тайна на Шамир — това е Схема за разделяне на тайна на Шамир. Можем да я превърнем Схема за разделяне на тайна на Шамир в точка на графика Схема за разделяне на тайна на Шамир и да създадем полиномиална функция от степен Схема за разделяне на тайна на Шамир, която удовлетворява тази точка. Напомням, че Схема за разделяне на тайна на Шамир ще бъде нашият праг на необходимите фрагменти, така че ако установим прага на три фрагмента, трябва да изберем полиномиална функция от степен две.

Нашият полином ще има формата Схема за разделяне на тайна на Шамир, където Схема за разделяне на тайна на Шамир и Схема за разделяне на тайна на Шамир — случайно избрани положителни цели числа. Ние просто изграждаме полином от степен Схема за разделяне на тайна на Шамир, където свободният коефициент Схема за разделяне на тайна на Шамир е нашата тайна Схема за разделяне на тайна на Шамир, а всеки от следващите Схема за разделяне на тайна на Шамир членов е случаен положителен коефициент. Ако се върнем към първоначалния пример и предположим, че Схема за разделяне на тайна на Шамир, тогава ще получим функция Схема за разделяне на тайна на Шамир.

На този етап можем да генерираме фрагменти, свързвайки Схема за разделяне на тайна на Шамир уникални цели числа в Схема за разделяне на тайна на Шамир, където Схема за разделяне на тайна на Шамир (защото това е нашата тайна). В този пример искаме да раздадем четири фрагмента с прага три, така че случайно генерираме точки Схема за разделяне на тайна на Шамир и изпращаме по една точка на всеки от четиримата доверени лица, съхранители на ключа. Също така уведомяваме хората, че Схема за разделяне на тайна на Шамир, тъй като това се счита за публична информация и е необходимо за възстановяване Схема за разделяне на тайна на Шамир.

Възстановяване на тайната

Вече обсъдихме концепцията за полиномна интерполация и това, че тя лежи в основата на схемата на Шамир Схема за разделяне на тайна на Шамир. Когато каквито и да е три от четирима доверени лица искат да възстановят Схема за разделяне на тайна на Шамир, им е нужно само да интерполират Схема за разделяне на тайна на Шамир със своите уникални точки. За това те могат да определят своите точки Схема за разделяне на тайна на Шамир и да изчислят интерполационния полином на Лагранж, използвайки следната формула. Ако програмирането ви е по-разбираемо от математиката, то пи е по същество оператор for, който умножава всички резултати, а сигма е for, която всичко събира.

Схема за разделяне на тайна на Шамир

Схема за разделяне на тайна на Шамир

При Схема за разделяне на тайна на Шамир можем да решим това по следния начин и да върнем нашата първоначална полиномна функция:

Схема за разделяне на тайна на Шамир

Тъй като знаем, че Схема за разделяне на тайна на Шамир, възстановяването Схема за разделяне на тайна на Шамир се извършва просто:

Схема за разделяне на тайна на Шамир

Използване на небезопасна целочислена аритметика

Въпреки че успешно приложихме основната идея на Шамир Схема за разделяне на тайна на Шамир, имаме проблем, който игнорирахме до момента. Нашата полиномна функция използва небезопасна целочислена аритметика. Имайте предвид, че за всяка допълнителна точка, която атакуващият получи на графиката на нашата функция, остава по-малко количество възможности за другите точки. Можете да видите това сами, когато изграждате график с увеличаване на броя на точките за полиномна функция с използване на целочислена аритметика. Това е контрапродуктивно за нашата заявена цел на сигурност, защото злонамереният не трябва да знае абсолютно нищо, докато не има поне Схема за разделяне на тайна на Шамир фрагменти.

За да демонстрираме колко слаба е схемата с целочислена аритметика, разгледайте сценарий, в който злонамереният е получил две точки Схема за разделяне на тайна на Шамир и знае публичната информация, че Схема за разделяне на тайна на Шамир. От тази информация той може да извлече Схема за разделяне на тайна на Шамир, равен на две, и да свърже известните стойности в уравнението Схема за разделяне на тайна на Шамир и Схема за разделяне на тайна на Шамир.

Схема за разделяне на тайна на Шамир

След това нападателят може да намери Схема за разделяне на тайна на Шамир, като изчисли Схема за разделяне на тайна на Шамир:

Схема за разделяне на тайна на Шамир

Понеже определихме Схема за разделяне на тайна на Шамир като случайно избрани положителни цели числа, има ограничен брой възможни Схема за разделяне на тайна на Шамир. С тази информация нападателят може да извлече Схема за разделяне на тайна на Шамир, тъй като всичко, което е над 5, ще направи Схема за разделяне на тайна на Шамир отрицателно. Това се оказва вярно, тъй като ние определихме Схема за разделяне на тайна на Шамир

След това нападателят може да изчисли възможните стойности Схема за разделяне на тайна на Шамир, като замени Схема за разделяне на тайна на Шамир в Схема за разделяне на тайна на Шамир:

Схема за разделяне на тайна на Шамир

С ограничен набор от опции за Схема за разделяне на тайна на Шамир става ясно колко лесно е да подбереш и провериш стойностите Схема за разделяне на тайна на Шамир. Има само пет варианта тук.

Решаването на проблема с нестабилната целочислена аритметика

За да се отстрани тази уязвимост, Шамир предлага да се използва модулна аритметика, заменяйки Схема за разделяне на тайна на Шамир на Схема за разделяне на тайна на Шамир, където Схема за разделяне на тайна на Шамир и Схема за разделяне на тайна на Шамир — множеството на всичките прости числа.

Бързо да си припомним как работи модулната аритметика. Часовниците са вече позната концепция. Те използват часовници, които са Схема за разделяне на тайна на Шамир. Когато стрелката на часа премине през дванадесет, тя се връща на едно. Интересна особеност на тази система е, че просто поглеждайки часовника, не можем да извлечем колко оборота е направила стрелката на часа. Въпреки това, ако знаем, че стрелката на часа е преминала четири пъти през 12, можем напълно да определим колко часа са минали с проста формула Схема за разделяне на тайна на Шамир, където Схема за разделяне на тайна на Шамир — това е нашето деление (тук Схема за разделяне на тайна на Шамир), Схема за разделяне на тайна на Шамир — това е коефициентът (колко пъти делителят без остатък влиза в оригиналното число, тук Схема за разделяне на тайна на Шамир), а Схема за разделяне на тайна на Шамир — това е остатъкът, който обикновено връща операторът по модул (тук Схема за разделяне на тайна на Шамир). Познаването на всички тези стойности ни позволява да решим уравнението за Схема за разделяне на тайна на Шамир, но ако пропуснем коефициента, никога няма да можем да възстановим оригиналната стойност.

Може да се демонстрира как това подобрява безопасността на нашата схема, прилагайки схемата към нашия предишен пример и използвайки Схема за разделяне на тайна на Шамир. Нашата нова полиномиална функция Схема за разделяне на тайна на Шамир, а новите точки Схема за разделяне на тайна на Шамир. Сега ключоводителите могат отново да използват полиномиална интерполация, за да възстановят нашата функция, само че този път операциите на събиране и умножение трябва да бъдат придружени от модулно съкращаване Схема за разделяне на тайна на Шамир (напр. Схема за разделяне на тайна на Шамир).

Използвайки този нов пример, да предположим, че нападателят е узнал две от тези нови точки, Схема за разделяне на тайна на Шамир, а публичната информация Схема за разделяне на тайна на Шамир. Този път атакуващият, на базата на всяка налична информация, извежда следните функции, където Схема за разделяне на тайна на Шамир — набор от всички положителни цели числа, а Схема за разделяне на тайна на Шамир представлява коефициента на модула Схема за разделяне на тайна на Шамир.

Схема за разделяне на тайна на Шамир

Сега нашият нападател отново открива Схема за разделяне на тайна на Шамир, изчислявайки Схема за разделяне на тайна на Шамир:

Схема за разделяне на тайна на Шамир

След това отново се опитва да извлече Схема за разделяне на тайна на Шамир, като замени Схема за разделяне на тайна на Шамир в Схема за разделяне на тайна на Шамир:

Схема за разделяне на тайна на Шамир

Този път той има сериозен проблем. Във формулата липсват стойности Схема за разделяне на тайна на Шамир, Схема за разделяне на тайна на Шамир и Схема за разделяне на тайна на Шамир. Понеже съществуват безкрайно много комбинации от тези променливи, той не може да получи никаква допълнителна информация.

Съображения за сигурност

Схемата за разделяне на тайната на Шамир предлага сигурност в контекста на теорията на информацията. Това означава, че математиката е устойчива дори срещу нападател с неограничена изчислителна мощност. Въпреки това, схемата все пак съдържа няколко известни проблема.

Например, схемата на Шамир не създава проверяеми фрагменти, тоест хората могат свободно да представят фалшиви фрагменти и да затруднят възстановяването на правилната тайна. Враждебен пазач на фрагменти с достатъчно информация дори може да произведе друг фрагмент, променяйки Схема за разделяне на тайна на Шамир по свое усмотрение. Този проблем се решава чрез проверяеми схеми за разделяне на тайни, като схемата на Фелдман.

Друг проблем е, че дължината на всеки фрагмент е равна на дължината на съответната тайна, така че дължината на тайната е лесна за определяне. Този проблем се решава с тривиална попълване на тайната с произволни числа до фиксирана дължина.

Накрая, важно е да се отбележи, че нашите опасения относно сигурността могат да излязат извън самата схема. За реални криптографски приложения често съществува заплаха от атаки по странични канали, когато нападателят се опитва да извлече полезна информация от времето на изпълнение на приложението, кеширане, сривове и т.н. Ако това предизвиква безпокойство, по време на разработката трябва внимателно да се разгледат защитни мерки, като функции и търсене с постоянно време за изпълнение, да се предотврати запазването на паметта на диск и да се обмислят редица други неща, които излизат извън рамките на тази статия.

Демо

На на тази страница има интерактивна демонстрация на схемата за разделяне на тайната на Шамир. Демонстрацията е направена на база библиотеката ssss-js, която самата е JavaScript порт на популярната програма ssss. Обърнете внимание, че изчисляването на големи стойности Схема за разделяне на тайна на Шамир, Схема за разделяне на тайна на Шамир и Схема за разделяне на тайна на Шамир може да отнеме известно време.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster