Как криптографията защитава блокчейна?
Тази статия е откъс от книгата The Layman’s Guide to Bitcoin от Логан Бруче и се преиздава тук с разрешение на автора.
Криптографията е наука за прилагане на математически функции към парчета данни, за да се гарантира тяхната сигурност.
Много популярни фантастики предполагат, че всяка система може да бъде хакната, стига да имате достатъчно добър хакер. Това „хакерство в Холивуд“ не е начинът, по който функционира реалният свят – хакерът трябва да намери уязвимост в системата, която да използва, като отключена сървърна стая, лесна за отгатване парола, незащитен мрежов порт или „задна врата“ инсталиран като вътрешна работа, за да получи неоторизиран достъп по-късно.
Макар да е вярно, никога не можем да гарантираме, че дадена система няма уязвимости – в края на краищата системите са създадени от несъвършени хора – чувството, че „всичко може да бъде хакнато“ е невярно. От началото на 90-те години имаме достъп до криптографски техники, които са просто имунизирани срещу хакерство. Прилагането на такива техники понякога може да остави място за експлоатация.
Самата криптография не може да бъде хакната, за да генерира фалшив криптографски подпис (дефиниран скоро), както математиката не може да бъде хакната, за да направи 2 + 2 = 5 – въпреки че и криптографията, и математиката могат да се използват неправилно. Ако система, използваща криптография, се провали, това е така, защото дизайнерът неправилно е приложил криптографията. Това не е защото криптографията не е работила или защото някой е „хакнал“ криптографията – точно както не е грешка в математиката, ако банката ви неправилно използва сметката ви, или грешката на имейла, когато майка ви изтегли непознат прикачен файл и получи компютърен вирус . Това е важно разграничение, защото Биткойн е много пряко приложение на утвърдена криптография.
Криптографията не е нова, непроверена технология. Всички криптографски техники, използвани от Биткойн, се използват от създаването на Интернет и са от съществено значение за много често срещани интернет протоколи, използвани всеки ден. Криптографията се смята за надеждна и съществена от компютърните учени по същия начин, както ракетната наука се смята за надеждна и съществена от НАСА.
Ключови двойки: Основата на криптографията
Ключовите двойки са крайъгълният камък на криптографията, използвана в блокчейните. Пара ключове има две части: частен ключ и публичен ключ. Тези ключове всъщност не са нищо повече от много големи числа със специфична математическа връзка, използвани вместо пароли и потребителски имена.
Бихте се справили с публичен ключ като вашето собствено име или потребителско име: в повечето случаи го споделяте с всеки, който поиска, а тези, които го имат, могат да го използват, за да ви направят справка или да се свържат с вас. Той е обвързан с вашата репутация (или в случая на биткойн – историята на транзакциите ви), така че може да имате няколко публични ключа (и следователно няколко ключови двойки), които използвате за различни цели. Публичен ключ може да се използва за препратка или преглед на акаунт, но сам по себе си не може да упълномощи каквито и да е действия по този акаунт.
Частният ключ трябва да се третира като парола: той не трябва да се споделя с никого и се използва за удостоверяване на определени действия, като изпращане на BTC.
Но има важна разлика между частния ключ и паролата. За да използвате парола, трябва да я изпратите на човек или сървър, за да може да бъде проверена спрямо техните записи. Трябва да се доверите, че с изпращането на паролата ще се работи отговорно. За разлика от това, частен ключ може да се използва, за да се удостоверите, без да го изпращате никъде. Единственото място, което някога се съхранява или използва директно, е на вашето локално устройство.
Това е важно, защото ако можете да се удостоверите, без да изпращате тайната си никъде, можете да останете в пълен контрол върху нейната сигурност – не сте уязвими към пропуските в сигурността на други системи. Това е съществена част от това, което прави биткойните непробиваеми. В самия биткойн не се съхраняват пароли или частни ключове, които атакуващият да компрометира и въпреки това потребителите все още могат да удостоверяват транзакциите.
Но как бихте могли да използвате частен ключ за удостоверяване на транзакция, ако никога не изпращате частния ключ никъде? Отговорът е свързан с математическата връзка между частния и публичния ключ: криптографски подписи.
Криптографски подписи
Има няколко различни техники за генериране и валидиране на криптографски подписи и математическите теореми, които им позволяват да работят, са далеч извън обхвата на тази статия. За тези, които не са запознати с криптографията, описаният тук процес може първоначално да звучи направо невъзможно. Ясно си спомням, че имах това впечатление, когато започнах изследването си за биткойн преди четири години.
Засега просто ще отбележа отново, че тези технологии се използват в много често срещани интернет протоколи и са утвърдена част от информационната наука.
Представете си двама души, Алис и Боб, които вече са търгували лично с публични ключове. Алис иска да изпрати съобщение на Боб, но Боб е много подозрителен човек и няма да се довери, че съобщението всъщност е дошло от Алис, освен ако не може да го докаже математически, без всякакво съмнение. За да улеснят това доказателство, те се съгласяват да използват криптографски подпис.
За да генерира подписа, Алис използва алгоритъма за генериране на подписи на компютъра си, който взема като вход личния си ключ и пълното си съобщение и генерира криптографски подпис. След това тя изпраща на Боб това комбинирано съобщение / подпис, но от решаващо значение, не й изпраща частния ключ.
Когато Боб получава съобщението и подписа, той има допълнителен алгоритъм за проверка на подписа, който да използва. Този алгоритъм приема като вход съобщението и подписа и определя публично ключ на парата ключове, която Алис използва за генериране на подписа. Когато Боб вижда, че алгоритъмът му извежда публичния ключ на Алис, той математически е доказал, че подписът трябва да е генериран с парата ключове на Алис, въпреки че не знае и не може да изчисли частната половина на парата на Алис.
Поставете по-кратко, този процес на криптографски подпис позволява на Боб да провери, че съобщението не е създадено или модифицирано от някаква трета страна и трябва да е генерирано с частния ключ на Алиса, без да се налага (или да е в състояние) да знае нейния частен ключ. Всичко, от което се нуждае, е комбинацията съобщение / подпис и нейният публичен ключ.
Интуитивно това изглежда невъзможно и може да се почувствате така, сякаш сте разбрали нещо погрешно. Ако частните и публичните ключове на Алис са толкова тясно свързани и Алис използва личния си ключ, за да генерира подписа, който Боб получава, как става така, че той може да извлече публичния й ключ, но не може да намери личния си ключ? Отговорът на това изисква далеч по-задълбочено разбиране на математиката от повечето хора и е далеч извън обхвата на тази книга.
И все пак, на тази техника се разчита и се използва всеки ден и се счита за стабилна в криптографската общност. Когато посетите уебсайт и адресът му започва с https, „s“ показва, че сайтът се е потвърдил с криптографски подпис. Компютърът ви използва алгоритъм за проверка на подписи, точно както Боб в горния пример, за да провери дали уебсайтът наистина идва от правилната пара ключове. На този криптографски подпис се разчита, за да се гарантира, че всяко по-нататъшно взаимодействие между вас и уебсайта е криптирано и автентично. Ако този тест не успее, съвременните браузъри ще ви предупредят и ще сигнализират уебсайта като опасен.
Достатъчно големи числа
По-рано споменах накратко, че частните и публичните ключове функционират като потребителски имена и пароли, но в действителност не са нищо повече от изключително големи числа със специална математическа връзка. Като се има предвид това, често ми задават следните въпроси:
„Не може ли някой просто да отгатна или преброи куп цифри и да ги опита като частни ключове? Няма ли в крайна сметка да се сблъскат с частен ключ на някаква целенасочена пара ключове и по този начин да получат контрол над тази идентичност? ” Всъщност, в случая с биткойн, това би позволило на нападателя да открадне парите, държани от някаква пара ключове.
Това е добър въпрос и въпреки това не се случва. Както беше посочено по-горе, има няколко биткойн адреса с BTC на стойност милиони долари, които не са се движили от години – въпреки че всичко, което би било необходимо, за да го открадне, е правилният частен ключ – точния огромен брой! Ако бихте могли да познаете частния ключ към тези адреси, парите са ваши, за да ги изпратите навсякъде. За разлика от паролата, можете да проверявате частни ключове локално на собствената си машина и няма сървър, ограничаващ колко пъти или колко бързо ги пробвате.
Е, защо все още никой не е откраднал тези средства? Отговорът се крие в почти абсурдния размер на числата, използвани като частни ключове. Те са достатъчно огромен.
Нека започнем с обикновен мисловен експеримент. Представете си, че вашият частен ключ е бил достатъчно голям, че ако всички компютри в света работят заедно, ще им отнеме цели 24 часа, за да го познаят. Ако добавите само още една цифра към личния си ключ, ще има десет пъти повече пермутации, за да преминат компютрите, така че ще отнеме 10 дни вместо една. Още шест цифри биха довели до 27 000 години.
Във всеки случай генерирането на частен ключ – което изисква само способността да се създават произволни числа – остава тривиално. Използването на частния ключ за генериране на подписи, както и проверката на тези подписи спрямо публичния ключ, също остава изчислително просто. Но работата, необходима за отгатване на частния ключ, нараства експоненциално с всяка допълнителна цифра. За да направим частните ключове „имунизирани“ срещу отгатване с груба сила, трябва само да добавим достатъчно цифри – трябва само да ги направим достатъчно огромни.
И така, колко огромен е достатъчно огромен? Частните ключове, използвани в Bitcoin, са 256-битови цели числа, което възлиза на число, което е седемдесет и шест цифри. Силата на размера на това число е невероятна. Следващата илюстрация е получена в голяма степен от книгата на Брус Шнайер Приложна криптография, и е убедителна демонстрация на достатъчно огромен брой.
Първо, признайте, че специфична последица от втория закон на термодинамиката е, че има минимална енергия, необходима за промяна на единичен двоичен бит информация (промяна на 1 на 0 или обратно). Това означава, че всеки изчислителен процес изисква минимална енергия за изпълнение, независимо от използвания хардуер.
Сега да предположим, че сте успели да използвате цялата енергия на слънцето само за захранване на специално проектиран компютър, чиято работа е да преброява или отгатва частни ключове, с надеждата да намерите частния ключ на пара ключове (която може да контролира BTC).
Използвайки малко математика и термодинамика, ще откриете, че един напълно ефективен компютър може да преброи 2178 стойности, като се има предвид цялата годишна енергия на слънцето. Ако разделим тази стойност на броя на възможните частни ключове, 2256, ще открием, че този хипотетичен компютър би могъл да отгатне или преброи само 0,0000000000000000000003% от общия брой възможни частни ключове – като се има предвид цялата годишна енергийна мощност на слънцето.
Освен това, това е просто броене и не включва много по-сложната задача за действителна проверка на всеки частен ключ, за да се види дали отговаря на правилния публичен ключ. Така че при 0,0000000000000000000003% шанс този компютър да се е случил с десния частен ключ в края на една година, той дори нямаше да го осъзнае.
Тези цифри нямат нищо общо с технологията на устройствата; те са максимумите, които са възможни според законите на термодинамиката, установени от 30-те години на миналия век. И те категорично предполагат, че грубите атаки срещу 256-битови ключове (които биткойн използва) ще бъдат невъзможни, докато компютрите не бъдат изградени от нещо различно от материята и заемат нещо различно от космоса.
Това е силата на достатъчно огромни числа. Няма значение колко добър е хакерът. Освен ако не може да използва силата на триста слънчеви милиона слънца за една година или едно слънце за триста секстилионни години, компютърът му дори не може броя чрез всички частни ключове – камо ли да ги тествате или използвате по друг начин.
За по-задълбочен поглед върху биткойните и криптографията вземете книгата на Logan Brutsche, The Layman’s Guide to Bitcoin.