Тип подписания хеш что это
Цифровая подпись - это криптографический механизм, который используется для проверки подлинности и целостности цифровых данных. Мы можем рассматривать его как цифровую версию обычных рукописных подписей, но с более высоким уровнем сложности и безопасности.
Концепция защиты коммуникационных каналов связи с использованием криптографии берет свое начало еще с древних времен, а системы с цифровой подписью появились только в 1970-х годах благодаря развитию криптографии с открытым ключом. По этой причине, чтобы узнать, как работает цифровая подпись, нам для начала необходимо ознакомится с основами хэш-функций и криптографии с открытым ключом.
Цифровые подписи
Цифровые подписи в блокчейнах базируются на криптографии с открытым ключом. В ней используются два ключа. Первый — закрытый ключ — нужен для формирования цифровых подписей и хранится в секрете. Второй — открытый ключ — используется для проверки электронной подписи. Открытый ключ реально вычислить на основе закрытого ключа, а вот обратное преобразование требует невозможного на практике объема вычислений, сравнимого с брут-форсом.
Существует множество различных схем криптографии с открытым ключом. Две самые популярные из них — это схемы на основе разложения на множители (RSA) и схемы на основе эллиптических кривых. Последние более популярны в блокчейнах из-за меньшего размера ключей и подписей. Например, в биткойне используется стандарт эллиптической криптографии ECDSA вместе с эллиптической кривой secp256k1. В ней закрытый ключ имеет длину 32 байта, открытый — 33 байта, а подпись — около 70 байт.
Затем Алиса подписывает транзакцию, используя свой секретный ключ. Любой узел в биткойн-сети может проверить, что транзакция подписана определенным открытым ключом (аутентификация), с которым до выполнения транзакции был ассоциирован один биткойн (авторизация). Если эти условия выполнены, то переведенный биткойн начинает ассоциироваться с открытым ключом Боба.
Поскольку в блокчейне нет центрального узла, который может авторизовать произвольные транзакции, безопасность системы становится децентрализованной, а вероятность успешного вмешательства в работу блокчейна снижается практически до нуля.
Таким образом, блокчейн использует цифровые подписи для аутентификации и обеспечения целостности транзакций (и иногда блоков). В случае криптовалюты процесс аутентификации означает, что потратить средства может только тот человек, которому они были посланы другой, более ранней, транзакцией. Особенность блокчейна состоит в том, что информация об аутентификации «вшита» в каждую транзакцию, а не отделена от бизнес-логики, поэтому блокчейн считается более защищенным. В обычной системе можно взломать или административно обойти механизм аутентификации и провести манипуляции с бэкэндом, а в блокчейне сделать этого не получится по определению.
P.S. В наших следующих постах мы планируем затронуть такие моменты, как смарт-контракты и алгоритмы консенсуса, а также поговорить о том, что будет означать распространение квантовых компьютеров для блокчейна.
Электронная цифровая подпись используется для аутентификации текстов, передаваемых по телекоммуникационным каналам. При таком обмене существенно снижаются затраты на обработку и хранение документов, убыстряется их поиск. Но возникает проблема аутентификации автора электронного документа и самого документа, т. е. установления подлинности автора и отсутствия изменений в полученном электронном документе.
Эти виды злоумышленных действий могут нанести существенный ущерб банковским и коммерческим структурам, государственным предприятиям и организациям, частным лицам, применяющим в своей деятельности компьютерные ИТ.
Подпись
Хеширование данных
Заключение
В статье вкратце было рассмотрено, как работает электронная подпись. Видно, что алгоритм достаточно устойчив и почти не имеет слабых мест. Однако, как и во многих случаях, самое слабое место этого метода - человеческий фактор, оставляющий большой простор для действий злоумышленников.
Криптография — это сердце блокчейна, которое обеспечивает работу системы. Архитектура блокчейна предполагает, что доверие между участниками сети базируется на принципах математики и экономики, то есть является формализованным. Криптография также гарантирует безопасность, причем основанную на прозрачности и проверяемости всех операций, а не на традиционном для индустрии ограничении видимости системы (perimeter security).
Различные криптографические техники гарантируют неизменность журнала транзакций блокчейна, решают задачу аутентификации и контролируют доступ к сети и данным в блокчейне в целом. В сегодняшнем материале мы поговорим о хеш-функциях, ключах и цифровых подписях.
/ изображение BTC Keychain CC
Хэш-функции
Проверка
По этой причине для Алисы крайне важно хранить свой приватный ключ в секрете. Если другой человек завладеет ее приватным ключом, он сможет создавать цифровые подписи и осуществлять операции от ее имени. В контексте первой криптовалюты такая ситуация означает, что кто-то может перемещать или тратить биткоины Алисы без ее разрешения.
Заключение
Хэш-функции и криптография с открытым ключом лежат в основе систем с цифровой подписью, которые в настоящее время являются пригодными для широкого спектра применений. При правильной реализации цифровые подписи могут повысить безопасность, обеспечить должную целостность и облегчить аутентификацию всех видов цифровых данных.
В области блокчейн-технологий цифровые подписи используются для авторизации и подписания криптовалютных транзакций. Данная технология является в особенности важной если речь идет о биткоинах, поскольку подписи выступают гарантом того, что монеты могут быть потрачены только теми лицами, которые владеют соответствующими приватными ключами.
Хотя мы годами использовали как электронные, так и цифровые подписи, им еще есть куда развиваться. Большая часть сегодняшней бюрократии все еще основана на бумажной работе, но мы скорее всего станем свидетелями более широкого внедрения цифровых подписей, когда перейдем к более цифровому виду систем обработки данных.
Итак, все чаще в кругах, работающих с документами все чаще звучат слова «электронный документ» и, связанное с ним почти неразрывно «электронная цифровая подпись», иначе — ЭЦП.
Данный цикл статей предназначен для того, чтобы раскрыть «тайное знание» о том, что это такое, когда и как это можно и нужно использовать, какие есть плюсы и минусы.
Естественно, статьи пишутся не для специалистов по криптографии, а для тех, кто эту самую криптографию будет использовать, или же только начинает ее изучение, желая стать специалистом, поэтому я старался максимально упростить понимание всего процесса, приводя аналогии и рассматривая примеры.
Зачем нам вообще что-то подписывать? Естественно, чтобы удостоверить, что мы ознакомились с содержимым, согласны (а иногда наоборот, не согласны) с ним. А электронная подпись еще и защищает наше содержимое от подмены.
Итак, начать, естественно, стоит с того, что такое электронная цифровая подпись.
В самом примитивном случае это — результат хэш-функции. Что это такое лучше меня разъяснит википедиа, в нашем же случае главное, что с высокой степенью вероятности ее результат не повторяется для разных исходных данных, а также что результат этой функции мало того, что короче исходных данных, так еще по нему исходную информацию восстановить нельзя. Результат функции называют хэшем, а применение этой функции к данным называют хешированием. Грубо, можно назвать хэш функцию архивированием, в результате чего мы получаем очень маленькую последовательность байт, но восстановить исходные данные из такого «архива» нельзя.
Итак, мы читаем файлик в память, хэшируем прочитанное. И что, уже получаем ЭЦП? Почти. Наш результат с большой натяжкой можно назвать подписью, но, все же, полноценной подписью он не является, потому что:
1. Мы не знаем, кто сделал данную подпись
2. Мы не знаем, когда была сделана подпись
3. Сама подпись не защищена от подмены никак.
4. Ну и да, хэш функций много, какая из них использовалась для создания этого конкретного хэша?
Поэтому применять к хэшу слово «подпись» еще нехорошо, будем называть его дальше просто хэш.
Вы посылаете ваш файл другому человеку, допустим, по почте, будучи уверенными, что он точно получит и прочитает именно то, что вы послали. Он же, в свою очередь, тоже должен хэшировать ваши данные и сравнить свой результат с вашим. Если они совпали — все хорошо. Это значит что данные защищены? Нет.
Ведь хэшировать может кто угодно и когда угодно, и вы никогда не докажете, что он хэшировал не то, что вы послали. То есть, если данные будут перехвачены по дороге злоумышленником, или же тот, кому вы посылаете данные — не очень хороший человек, то данные могут быть спокойно подменены и прохэшированы. А ваш получатель (ну или вы, если получатель — тот самый нехороший человек) никогда не узнает, что он получил не то, что вы отправляли, или сам подменил информацию от вас для дальнейшего использования в своих нехороших целях.
Посему, место для использование чистой хэш функции — транспорт данных в пределах программы или программ, если они умеют общаться между собой. Собственно, с помощью хэш функций вычисляются контрольные суммы. И эти механизмы защищают от случайной подмены данных, но не защищают от специальной.
Но, пойдем дальше. Нам хочется защитить наш результат хеширования от подмены, чтобы каждый встречный не мог утверждать, что это у него правильный результат. Для этого самое очевидное что (помимо мер административного характера)? Правильно, зашифровать. А ведь с помощью шифрования же можно и удостоверить личность того, кто хэшировал данные! И сделать это сравнительно просто, ведь есть ассиметричное шифрование. Да, оно медленное и тяжелое, но ведь нам всего-то и надо — зашифровать маленькую последовательность байт. Плюсы такого действия очевидны — для того, чтобы проверить нашу подпись, надо будет иметь наш открытый ключ, по которому личность зашифровавшего (а значит, и создавшего хэш) можно легко установить.
Суть этого шифрования в следующем: у вас есть закрытый ключ, который вы храните у себя. И есть открытый ключ. Открытый ключ вы можете всем показывать и раздавать, а закрытый — нет. Шифрование происходит с помощью закрытого ключа, а расшифровывание — с помощью открытого.
Приводя аналогию, у вас есть отличный замок и два ключа к нему. Один ключ замок открывает (открытый), второй — закрывает (закрытый). Вы берете коробочку, кладете в нее какую-то вещь и закрываете ее своим замком. Так, как вы хотите, чтобы закрытую вашим замком коробочку открыл ее получатель, то вы открытый, открывающий замок, ключик спокойно отдаете ему. Но вы не хотите, чтобы вашим замком кто-то закрывал коробочку заново, ведь это ваш личный замок, и все знают, что он именно ваш. Поэтому закрывающий ключик вы всегда держите при себе, чтобы кто-нибудь не положил в вашу коробочку мерзкую гадость и не говорил потом, что это вы ее положили и закрыли своим замком.
И все бы хорошо, но тут сразу же возникает проблема, а, на самом деле, даже не одна.
1. Надо как-то передать наш открытый ключ, при этом его должна понять принимающая сторона.
2. Надо как-то связать этот открытый ключ с нами, чтобы нельзя было его присвоить.
3. Мало того, что ключ надо связать с нами, надо еще и понять, какой зашифрованный хэш каким ключом расшифровывать. А если хэш не один, а их, скажем, сто? Хранить отдельный реестр — очень тяжелая задача.
Все это приводит нас к тому, что и закрытый ключ, и наш хэш надо хранить в каких-то форматах, которые нужно стандартизировать, распространить как можно шире и уже тогда использовать, чтобы у отправителя и получателя не возникало «трудностей перевода».
Как водится у людей, к чему-то единому прийти так и не смогли, и образовалось два больших лагеря — формат OpenPGP и формат S/MIME + X.509. Но об этом уже в следующей статье.
Развитие цифровых технологий упростило многие моменты нашей жизни, в том числе, обмениваться документами и письмами в электронной форме оказалось быстрее и удобнее, чем в бумажной. Однако у электронного документооборота была проблема: нужно было как- то подтверждать подлинность электронных бумаг. На бумаге для этого использовались подписи, однако в цифровом формате их было достаточно легко подделать, поэтому для электронных документов требовался более надежный метод подтверждения. Поэтому и стал популярным аналог ручных подписей - электронная подпись, о которой будет рассказано дальше.
Сначала вкратце опишу то, как работает электронная подпись (ЭП) и в чём заключается её надёжность. Электронная подпись – подтверждение того, что какой-либо электронный документ был создан и подписан определённым физическим или юридическим лицом. При этом она должна обладать следующими свойствами:
Неотказуемость – подписавшее документ лицо не может утверждать, что это сделал кто-то другой;
Целостность – внесение исправлений в уже подписанный документ должно нарушать подпись;
Авторство – электронная подпись должна быть жёстко закреплена за определённым физическим или юридическим лицом.
Эти базовые принципы и делают ЭП эффективной и безопасной в использовании.
Хеш-функции
Хеширование — это процесс преобразования массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины. Например, хеш-функция может принимать строку с любым количеством знаков (одна буква или целое литературное произведение), а на выходе получать строку со строго определенным числом символов (дайджест).
Хеш-функции имеются практически в любом языке программирования. Например, они используются для реализации хеш-таблиц и множеств (HashMap/HashSet в Java, dict и set в Python, Map, Set и объекты в JavaScript и так далее). Отдельная категория хеш-функций — криптографические хеш-функции. К ним предъявляются существенно более строгие требования, чем к функциям, обычно используемым в хеш-таблицах. Поэтому и применяются они в более «серьезных» случаях, например для хранения паролей. Криптографические хеш-функции вырабатываются и тщательно проверяются исследователями по всему миру.
Поэкспериментировать с хеш-функциями можно, написав простую программу на Python:
Функция hash_hex() рассчитывает представление хеша в шестнадцатеричной записи для строки. В приведенном примере используется функция SHA-256 — та же, что и в биткойне.
Хорошая хеш-функция обеспечивает защиту от коллизий (невозможно получить два одинаковых хеша при разных начальных данных) и обладает так называемым эффектом лавины, когда малейшее изменение входных данных значительно преобразует выходное значение. Эффект лавины в хеш-функции SHA-256 выглядит следующим образом:
Хеш-функции в блокчейнах гарантируют «необратимость» всей цепочки транзакций. Дело в том, что каждый новый блок транзакций ссылается на хеш предыдущего блока в реестре. Хеш самого блока зависит от всех транзакций в блоке, но вместо того, чтобы последовательно передавать транзакции хеш-функции, они собираются в одно хеш-значение при помощи двоичного дерева с хешами (дерево Меркла). Таким образом, хеши используются как замена указателям в обычных структурах данных: связанных списках и двоичных деревьях.
За счет использования хешей общее состояние блокчейна — все когда-либо выполненные транзакции и их последовательность — можно выразить одним-единственным числом: хешем самого нового блока. Поэтому свойство неизменности хеша одного блока гарантирует неизменность всего блокчейна.
Ниже приведена рекурсивная реализация дерева Меркла, используемая в биткойне, на языке Python (по ссылке вы найдете примеры работы). На вход функции подается список хешей транзакций. На каждом этапе вычисления последовательные пары хешей склеиваются при помощи хеш-функции; если хешей нечетное число, то последний дублируется. В результате остается единственный хеш, который и является конечным хеш-значением для всего списка.
Хеш-деревья имеют много применений помимо блокчейнов. Они используются в файловых системах для проверки целостности файлов, распределенных БД для быстрой синхронизации копий и в управлении ключами для надежного журналирования выдачи сертификатов. Git использует обобщение хеш-деревьев — направленные ациклические графы на основе хешей. В блокчейне использование хеш-деревьев продиктовано соображениями производительности, так как они делают возможным существование «легких клиентов», которые обрабатывают лишь малую часть транзакций из блокчейна.
Принцип работы цифровой подписи
В контексте криптовалют, система цифровых подписей зачастую состоит из трех основных этапов, это хеширование, непосредственно сам процесс подписи и ее проверка.
Немного теории
В качестве алгоритмической базы для электронной подписи обычно применяют методы шифрования с открытым ключом. Подробнее о самих алгоритмах можно почитать на википедии или на хабре. Их суть сводится к тому, что для желающего обзавестись собственной электронной подписью специальным образом выбирается пара ключей – открытый и закрытый. Первый, как следует из названия, доступен всем, а второй владельцу подписи лучше держать в секрете. Естественно, ключи выбираются так, чтобы закрытый ключ нельзя было легко угадать по открытому. После чего закрытый ключ используется для шифрования документа (иными словами, его подписания), а открытый – для расшифровки (то есть для проверки подписи). При этом алгоритмы выбора ключей гарантируют, что открытым ключом можно расшифровать только те документы, которые шифровались соответсвующим ему закрытым ключом. Таким образом, если мы знаем открытый ключ владельца ЭП и смогли расшифровать им полученный от него документ, то он был точно подписан тем самым владельцем. Так работают асимметричные схемы ЭП.
Варианты использования
Цифровые подписи могут применяться к различным видам цифровых документов и сертификатов. Таким образом, у них есть несколько направлений, некоторые из наиболее распространенных вариантов использования включают в себя:
- Информационные технологии. Повышение безопасности систем интернет-комуникации.
- Финансы. Реализация в аудитах, отчетах о расходах, кредитных договорах и многих других финансовых документах.
- Юридические вопросы. Использование во всех видах деловых контрактов и юридических соглашениях, включая правительственные документы.
- Здравоохранение. Предотвращение мошенничества с рецептами и медицинскими записями.
- Блокчейн. Система цифровых подписей гарантирует, что только законные владельцы криптовалюты могут подписать транзакцию для дальнейшего перевода средств (за исключением случаев, когда приватный ключ владельца был скомпроментирован).
Недостатки
Основные проблемы с которыми может столкнутся данная технология зависит по крайней мере от трех составляющих:
- Алгоритм. Качество алгоритмов используемых для генерации цифровой подписи имеет крайне важное значение. Это включает в себя выбор надежных хэш-функций и криптографических систем.
- Реализация. Если алгоритмы работают правильно, а интеграция технологии цифровых подписей прошла не совсем успешно, система скорее всего будет обладать определенным количеством недостатков.
- Приватный ключ. Если произошла утечка приватных ключей или по какой-то причине они были скомпрометированы, свойства аутентификации и неотрекаемости будут признаны недействительными. Для пользователей криптовалюты потеря своего приватного ключа может привести к значительным финансовым потерям.
Что же может пойти не так?
И действительно, в теории взломать или подделать такую подпись можно несколькими способами. Самый лакомый способ для взломщика-криптоаналитика – это по открытому ключу угадать закрытый. Тогда злоумышленнику сразу открываются сказочные перспективы – ведь он сможет действовать от лица истинного владельца подписи и даже управлять его имуществом. Однако обычно такой взлом не возможен ввиду того, что подбор закрытого ключа по открытому – вычислительно нерешаемая задача. При генерации пары ключей широко применяются факторизация или дискретное логарифмирование, что оставляет взломщику мало надежды. Конечно можно попробовать подобрать закрытый ключ полным перебором, но при достаточно большом размере ключей такая возможность отпадает.
Ещё одно уязвимое место – это хэш-функция. Здесь возможны сразу несколько направлений атак. Если алгоритм хэширования не достаточно надёжный, то взломщик может подобрать какой-нибудь свой документ, применение хэш-функции к которому даст тот же результат, что и её применение к исходному документу. Или же злоумышленник может сгенерировать два документа, дающие одинаковый хэш, после чего при необходимости сможет подменить один документ другим. Названные ситуации считаются коллизиями хэш-функций. Однако жизнь взломщика хэш-функции всё же не так легка: мало того, что подставной документ должен представлять из себя читаемый текст, а не быть бессмысленным набором бит, так еще и придумано достаточно криптостойких алгоритмов хэширования. Для примера, надёжными на момент написания статьи являются SHA-3, BLAKE2, семейство JH или отечественный «Стрибог» (он же ГОСТ 34.11-2018).
Применение хэш-функций
В связи с тем, что шифрование закрытым ключом документа большого размера – довольно сложный и долгий процесс, обычно к тексту документа сначала применяют более быстрое и простое хэш-шифрование. Полученный сравнительно короткий результат шифруют закрытым ключом, получая саму цифровую подпись. Вместе с ней открытый текст документа передаётся получателю.
Подробная схема с применением хэш-функции
Тот должен всего лишь хэшировать текст документа той же хэш-функцией, после чего расшифровать открытым ключом подпись и сравнить оба результата. Если они совпадают – то документ мог быть подписан только отправителем (вот она и неотказуемость) и не был испорчен, дополнен или подменён в процессе пересылки (а это целостность). А дляпоследнего свойства – авторства – необходимо, чтобы пара ключей подписавшего была закреплена за ним. На практике для этого используются так называемые удостоверяющие центры, которые по запросу выдают сертификат на пару ключей, а также гарантируют единственность обладания ими.
Основные процедуры цифровой подписи
Функционально цифровая подпись аналогична обычной рукописной подписи и обладает ее основными достоинствами:
• удостоверяет, что подписанный текст исходит от лица, поставившего подпись;
• не дает самому этому лицу возможности отказаться от обязательств, связанных с подписанным текстом;
• гарантирует целостность подписанного текста.
Электронная цифровая подпись (ЭЦП) представляет собой относительно небольшое количество дополнительной цифровой информации, передаваемой вместе с подписываемым текстом.
Технология применения системы ЭЦП предполагает наличие сети абонентов, посылающих друг другу подписанные электронные документы. Для каждого абонента генерируется пара ключей: секретный и открытый. Секретный ключ хранится абонентом в тайне и используется им для формирования ЭЦП. Открытый ключ известен всем другим пользователям и предназначен для проверки ЭЦП получателем подписанного электронного документа.
Система ЭЦП включает две основные процедуры:
• формирования цифровой подписи;
• проверки цифровой подписи.
Рис. 5.6. Схема формирования электронной цифровой подписи
Эта статья была опубликована Вторник, 11 августа, 2009 at 19:58 в рубрике Принципы криптографической защиты информации. Вы можете следить за ответами через RSS 2.0 feed.
В чем важность цифровых подписей?
В основном цифровые подписи предназначены для достижения трех результатов: целостности данных, аутентификации и неотрекаемости.
Подключаем человеческий фактор, бюрократию и частные организации
В самом начале мы говорили о свойствах, которыми должна обладать качественная электронная подпись. Из них под действием уже упомянутых выше атак пока страдали только её целостность и неотказуемость. Однако в реалиях нашего мира наибольшее количество нарушений происходит из-за подмены авторства.
В России получение ЭП регулируется законом № 63-ФЗ «Об электронной подписи». Для её оформления нужно получить сертификат от удостоверяющего центра (УЦ) на выбор. В УЦ нужно предоставить необходимые документы и заплатить некоторую сумму, после чего забрать свой сертификат и заветный eToken с закрытым ключом.
Вот на получении сертификатов-то и возникает простор для всевозможных махинаций. Все УЦ являются коммерческими организациями, они обязательно аккредитованы Министерством цифрового развития и имеют лицензию от ФСБ. Однако чего не сделаешь ради прибыли - для УЦ порой желания клиентов выше установленных правил выдачи сертификата. Например, из-за этого сегодня возможно получить ЭП на другое лицо, пользуясь утечками персональных данных или некомпетентностью УЦ. Это приводит к довольно печальным последствиям – вплоть до переоформления квартиры или регистрации фиктивных организаций с целью взятия кредитов. Данные способы подделки подписей не требуют даже знания криптографии, достаточно лишь воспользоваться особенностями сертифицирования ЭП в России.
Электронная подпись против цифровой
Основным отличием между ними является метод аутентификации. Цифровые подписи используют криптографические системы, такие как хэш-функции, криптографию с открытым ключом и методы шифрования.
Криптография с открытым ключом (PKC)
Криптография с открытым ключом или PKC (от англ. Public-key cryptography) относится к криптографической системе, которая использует пару из открытого (публичного) и закрытого (приватного) ключа. Два математически связаны ключа могут использоваться как для шифрования данных, так и для создания цифровой подписи.
Как инструмент шифрования, PKC является более безопасным, в сравнении с его симметричным аналогом. В то время как подобные устаревшие системы используют один и тот же ключ для шифрования и дешифрования информации, PKC позволяет зашифровать данные с помощью публичного ключа и дешифровать их исключительно посредством соответствующего приватного ключа.
В некоторых возможных реализациях, цифровые подписи могут включать в себя шифрование, это означает, что данная функция не работает на постоянной основе. Например, в блокчейне биткоина также используются криптография с открытым ключом и цифровые подписи, но в отличие от всеобщего заблуждения, шифрование в его процессах отсутствует. С технической точки зрения, биткоин использует так называемый алгоритм цифровой подписи эллиптической кривой (ECDSA от англ. elliptic curve digital signature algorithm) для аутентификации своих транзакций.
Читайте также: