Электронная библиотека » Александр Цихилов » » онлайн чтение - страница 4

Текст книги "Блокчейн"


  • Текст добавлен: 30 сентября 2019, 15:04


Автор книги: Александр Цихилов


Жанр: Ценные бумаги и инвестиции, Бизнес-Книги


Возрастные ограничения: +12

сообщить о неприемлемом содержимом

Текущая страница: 4 (всего у книги 18 страниц) [доступный отрывок для чтения: 5 страниц]

Шрифт:
- 100% +
Цифровая электронная подпись

Привычное для нас понятие «подпись» старо как мир – задача проверки подлинности документов стояла перед человечеством с древнейших времен. В качестве элементов, усложняющих подделку документов, использовались уникальные формы начертания имени чиновника, купца, феодала или даже монарха, созданные рукой самого автора. Делалось это подчас в сочетании с сургучными или восковыми печатями с оттиском государственных или родовых гербов подписанта. Считалось, что данная комбинация в большой степени защищает документ от несанкционированного воспроизведения с измененными в пользу фальсификатора данными. В большинстве случаев эти защитные меры действительно себя оправдывали. Однако не существовало никакой гарантии, что какой-нибудь средневековый злоумышленник, вооруженный специальными для таких случаев приспособлениями, не сможет воссоздать копию документа, достаточно близкую к оригиналу.

С появлением и развитием компьютерных технологий проблема аутентичности информации, передаваемой по телекоммуникационным каналам, встала особенно остро – ведь подделать незащищенный цифровой документ гораздо проще, чем рукописный. Поэтому долгое время компьютерные документы распечатывали, подписывали вручную и в большинстве случаев ставили на них чернильную печать. Затем документ сканировался и передавался как графическое изображение, содержащее как печатные данные, так и рукотворные регалии. Но и в этом случае никаких гарантий от подделок существовать не могло. По крайней мере, до тех пор, пока технологии не перешли на совершенно новый качественный уровень – создание документов с цифровой электронной подписью, сформированной на базе алгоритмов асимметричной криптографии.

Цифровая электронная подпись – это результат работы определенного криптографического алгоритма, на вход которого подается два необходимых элемента: хеш набора данных, подлежащих подписанию, и секретный ключ владельца подписи. Цифровая подпись обладает целым рядом полезных свойств, главным из которых является то, что сформировать подпись может только владелец секретного ключа и никто иной. Точнее, могут иметь место вычислительные попытки восстановить секретный ключ из открытого, но, как мы убедились ранее, сделать это крайне сложно, и вероятность подобного исхода исчезающе мала. Цифровую подпись можно проверить на подлинность, зная открытый ключ владельца подписи. При этом подписанный конкретной подписью документ уже не сможет быть изменен ни в одном своем бите, поскольку подпись в этом случае сразу утратила бы свою валидность. Это произошло бы потому, что изменился бы хеш подписываемого документа, от которого напрямую зависит формирование самой подписи. То есть электронная цифровая подпись не только идентифицирует ее автора, но еще и гарантирует неизменность документа, который ею подписан.

Для формирования цифровой электронной подписи необходимо в первую очередь выбрать достаточно криптостойкий алгоритм асимметричной криптографии. Затем сформировать на его базе пару ключей – секретный и публичный. После чего вычислить хеш подписываемого блока данных, например, какого-то документа, предварительно выбрав подходящий алгоритм хеш-функции. Хеширование преследует две цели: защиту целостности исходных данных и создание их цифрового отпечатка в стандартизированной форме. После чего, имея хеш данных и закрытый ключ, мы запускаем алгоритм формирования ЭЦП и получаем на выходе результат в виде строки данных. Проверка подлинности подписи и целостности подписанных данных в различных алгоритмах шифрования математически отличается друг от друга. Однако общим принципом проверки является вычисление двух результатов, полученных разными способами, при этом для получения одного из них в обязательном порядке используется открытый ключ подписанта. Затем эти результаты сравнивают и в случае их неравенства делают вывод, что подпись подделана либо исходные данные претерпели изменения после подписания.

В качестве примера рассмотрим алгоритм RSA. Здесь сравниваются хеши подписанного блока данных, где первый хеш получается стандартным способом как результат действия хеш-функции над исходными данными, а второй вычисляется при помощи открытого ключа. Затем два полученных хеша сравниваются, после чего можно сделать выводы о подлинности подписи, то есть ее математическом соответствии подписанным данным. Следует еще раз подчеркнуть, что формирование ЭЦП или процедура ее проверки проводятся при помощи математических операций, присущих только конкретному, предварительно выбранному алгоритму шифрования. Как правило, для этого используются алгоритмы факторизации или дискретного логарифмирования, в том числе и на множестве точек эллиптических кривых. Именно последний способ в основном применяется в блокчейн-средах как наиболее криптостойкий. Схема примера подписания и проверки подписи при помощи алгоритма RSA показана на рисунке:



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

Помимо стандартной цифровой подписи, в различных реализациях блокчейн-проектов применяются некоторые экзотические ее формы. Например, «слепая подпись», которую еще называют «доказательством с нулевым разглашением». Алгоритм слепой подписи прост: один участник системы шифрует свое сообщение и посылает его другому участнику, который является доверенным узлом (доверенным для некоторого множества других узлов) в системе. Этот доверенный участник ставит свою подпись на зашифрованном сообщении, при этом фактически не имея понятия о его содержимом. После чего подписанное сообщение возвращается его исходному отправителю, который обратно дешифрует его, оставляя только подпись доверенного узла. Это можно было бы сравнить с ситуацией, когда доверенный участник получает заклеенный конверт, внутри которого, помимо листа с сообщением, находится также и копировальный лист. Получатель, не вскрывая конверт, ставит на него свою подпись, которая через копировальный лист автоматически отпечатывается на листе с сообщением. По возвращении конверта отправителю тот изымает из него подписанное сообщение, достигнув таким образом желаемого – получить подпись доверенного узла, не разглашая ему само сообщение. Подобную операцию можно провести и чисто математически, используя протоколы асимметричной криптографии, например, при помощи алгоритма факторизации RSA.

Для чего используются такие замысловатые приемы? На самом деле вариантов предостаточно. В качестве примера приведем систему тайного голосования на выборах. Чтобы получить бюллетень, избиратель должен быть идентифицирован сотрудником избирательной комиссии, который не должен видеть, каким образом проголосует избиратель. Использование технологии слепой подписи гарантирует, что бюллетени получат только идентифицированные избиратели, имеющие право голоса. В результате можно говорить о доверии к результатам выборов, поскольку в обществе присутствует доверие к сотрудникам избирательных комиссий. По аналогичному принципу работает и система электронного голосования, где проверяющий узел подписывает сообщение от идентифицированного им избирателя (содержащее зашифрованную информацию о его выборе), после чего возвращает ему подписанное сообщение. Подпись в данном случае означает, что факт права участия избирателя в голосовании был проверен доверенным узлом сети. Избиратель, получив подписанное сообщение, отправляет его на адрес специального счетчика, который учитывает его как легитимный голос за одного из кандидатов. Подобные алгоритмы уже используются в ряде стран на выборах в различные органы власти – от муниципальных структур до национальных парламентов. Самой известной страной, использующей интернет-голосование на базе национальных идентификационных карт, является Эстония, которая впервые применила эту процедуру на парламентских выборах 2007 года.

Еще одним интересным способом формирования ЭЦП является так называемая «кольцевая подпись». Еще в XVII столетии британские военные, подавая различные петиции с жалобами своему начальству, подписывали ее вокруг текста самого заявления. Столь необычная форма подписи использовалась для того, чтобы невозможно было выявить первого подписанта, которого командование всегда квалифицировало как главного зачинщика. Впоследствии этот способ переняли и американские военные, в частности, в конце XIX века во время войны с Испанией на Кубе. Когда появились электронные системы, позволяющие подписывать различные блоки данных, одновременно возникла необходимость в некоторых случаях маскировать конкретного подписанта в списке прочих потенциальных кандидатов. Для этого был разработан специальный математический алгоритм, формирующий определенный набор публичных ключей, связанных с различными участниками системы.

Большая часть самих задействованных участников сети обычно даже не подозревает, что их открытый ключ мог быть использован для формирования кольцевой подписи. В полученном таким образом наборе открытых ключей только один из них имеет в паре соответствующий ему секретный ключ, поскольку им оперирует, собственно, сам подписант, пожелавший остаться для всех остальных неизвестным. Сама кольцевая подпись формируется путем подачи на вход алгоритма набора открытых ключей (одного своего и многих чужих), собственного секретного ключа и самого подписываемого сообщения. После чего подписант получает на выходе строку данных кольцевой подписи. Эту подпись любой другой участник системы может проверить специальным алгоритмом, который использует все те же данные, за исключением, разумеется, секретного ключа, поскольку он может быть известен только лишь самому подписанту. Алгоритмы формирования кольцевой подписи обычно применяются в блокчейн-системах для дополнительной анонимизации в случае, если изначальной технологически заложенной секретности ее пользователям недостаточно. Подобные криптовалютные проекты мы еще будем рассматривать в разделе, посвященном проблематике анонимности в блокчейн.

Наконец, существует система консолидации электронных подписей от различных участников, которая называется «мультиподпись». Бывают ситуации, когда возникает необходимость управлять цифровыми активами на базе принятия решения несколькими участниками системы одновременно. Например, имеется некий электронный счет, на котором лежит существенная денежная сумма, принадлежащая группе участников или даже юридическому лицу. Правилами системы задается общее количество управляющих счетом, а также процентное значение веса подписи каждого из них. Как вариант предполагается, что любой перевод с данного счета должен быть подтвержден не менее чем 60 % весового участия всех управляющих. В случае трех управляющих с равным весом подписи (у каждого по 33,3 %) необходимо не менее двух участников, которые бы поставили свою электронную подпись под транзакцией, пересылающей денежные средства (33,3 % × 2 = 66,6 % > 60 % – пороговое условие считается выполненным). Подобная практика в блокчейн-системах обусловлена технологической невозможностью отозвать совершенные транзакции. Поэтому каждое решение по переводу значительных сумм, находящихся в коллективном владении, должно исключать возможность злоупотреблений со стороны какого-то конкретного лица, допущенного к управлению счетом. Мультиподпись может быть реализована в блокчейн-проектах различными математическими методами на базе алгоритмов асимметричной криптографии.

Идентифицирующий и охранительный функционал электронной подписи открывает широчайшие возможности для ее использования в повседневной практике, в первую очередь юридической и деловой. В настоящее время цифровая электронная подпись нашла применение как средство удаленной идентификации контрагентов при заключении различных соглашений – от учреждения новых предприятий до приобретения крупных активов, в том числе объектов недвижимости. В ряде государств цифровая электронная подпись юридически приравнена к обычной. Достаточно часто технология ЭЦП, а точнее, алгоритм мультиподписи используется в так называемых «эскроу-сервисах». Подобные услуги необходимы для заключения важных сделок, к которым привлекается третья арбитражная сторона, гарантирующая своей подписью надлежащее исполнение обязательств контрагентами по сделке. Значительное распространение различные алгоритмы формирования ЭЦП получили именно в блокчейн-средах. Являясь краеугольным камнем всего технологического процесса, цифровые подписи гарантируют пользователям распределенной сети права собственности на криптоактивы, осуществляя защиту целостности помещаемой в систему информации. Безусловно, вопросы безопасности и неуязвимости к взломам этого метода защиты информации всегда выходят на первый план.

В предыдущей главе отмечалось, что первый предложенный алгоритм шифрования с открытым ключом (алгоритм Диффи – Хеллмана) не имел возможности формирования цифровой подписи. Однако последующие за ним алгоритмы факторизации или дискретного логарифмирования, включая эллиптическую криптографию, как нельзя лучше подходят для этой цели. Тем не менее не следует пребывать в уверенности, что даже столь криптостойкие алгоритмы, как ECDSA, ожидает безоблачное будущее, поскольку ученые готовят для всего криптографического мира сюрприз в виде так называемых квантовых компьютеров. Именно этот тип нетривиальных вычислительных устройств может создать серьезную угрозу всем популярным алгоритмам шифрования. Что же представляет собой такое явление, как квантовый компьютер, и почему криптографическим алгоритмам следует его опасаться?

Квантовые вычисления

Возможности взлома криптографических алгоритмов, а именно – попытки восстановить секретный ключ из открытого, всегда были ограничены вычислительной мощностью компьютеров. Производительность процессоров с годами постоянно росла, но вместе с ней также росла и криптостойкость алгоритмов. Иными словами, задача взлома с каждым днем пропорционально усложнялась, и казалось, что этой гонке не будет конца. Однако за последние годы перед технологами, производящими электронные компоненты на интегральных схемах, в первую очередь микропроцессоры, начали явственно очерчиваться физические пределы дальнейшего уменьшения размера транзистора как базового элемента электронной схемы. По состоянию на 2018 год позднейшие разработки в области полупроводниковых технологий позволяют массово создавать микропроцессоры на базе 10-нанометрового технологического процесса. По крайней мере, компания Samsung уже использует эту технологию в своих смартфонах, в то время как компания Intel все еще продолжает делать процессоры для персональных компьютеров по технологии 14 нм. В любом случае технология изготовления транзистора постепенно приближается к атомным размерностям, при том, что одного атома явно недостаточно, чтобы из него сделать транзистор.

Последние новости из мира науки сообщают, что ученым удалось создать транзистор всего из семи атомов, и уменьшать это число далее уже едва ли возможно. Дело в том, что размер одного атома кремния оценивают в 0,2 нанометра, но одновременно с этим считается, что из-за физических ограничений минимально возможный размер затвора кремниевого транзистора составляет 5 нанометров. О чем это говорит? О том, что небезызвестный закон Мура, согласно которому производительность процессоров удваивается каждые 18 месяцев, практически достиг своего физического предела. Что, в свою очередь, отразится на максимально возможной вычислительной мощности компьютеров, которая также перестанет пропорционально увеличиваться, как это происходило ранее. В результате прогресс во взломе криптостойких алгоритмов шифрования постепенно сойдет на нет, и все текущие проекты, построенные на базе этих алгоритмов, смогут наконец почувствовать себя в безопасности. Однако так ли это на самом деле?

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

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

В 1931 году австрийский физик Эрвин Шредингер предложил мысленный эксперимент, в котором он помещал условного кота в стальную камеру, где находилось устройство с радиоактивным атомным ядром, а также колба с ядовитым газом. По условиям эксперимента атомное ядро в течение часа может ожидать распад с вероятностью 50 %. Если это происходит, то срабатывает механизм, разбивающий колбу, после чего кот погибает. Но если распад ядра все же не случился, тогда кот остается цел и невредим. Смысл этого эксперимента в том, что внешний наблюдатель никогда точно не знает, распалось ли ядро и жив ли кот, до тех пор, пока не откроет сам ящик, а до этого момента считается, что кот и жив, и мертв одновременно.

Понятно, что ни одна сущность в нашем мире не может находиться в двух разных состояниях в один и тот же момент времени. Поэтому правильнее было бы сказать, что кот находится в так называемом состоянии «суперпозиции», в котором все возможные варианты состояния принимаются с различной степенью вероятности. При этом сумма вероятностей всех возможных состояний обязательно должна быть равна 100 %. То же самое можно отнести и к принципу работы кубита квантового компьютера – он таким же образом может находиться в состоянии суперпозиции, принимая одновременно значения логического нуля и единицы. До момента непосредственного измерения состояния кубита его точное значение наблюдателю неизвестно, а после измерения и получения результата кубит сразу же фиксируется в однозначном состоянии нуля или единицы. Это на первый взгляд странное свойство кубитов оказалось очень полезным в организации параллельных расчетов сложных вычислительных задач, включая криптографические алгоритмы.

Еще одна интересная особенность кубитов состоит в том, что вместе они могут находиться в состоянии так называемой «квантовой запутанности», когда изменение состояния одного кубита автоматически влечет за собой изменение состояния другого, связанного с ним, на противоположное. Однако организовать квантовую запутанность большого числа кубитов между собой технологически очень сложно, поскольку их необходимо тщательно изолировать от любых видов помех в окружающей среде. На текущий момент ведущим производителям квантовых компьютеров, таким, например, как Google, удалось удержать в связанном состоянии целых 72 кубита, что пока является мировым рекордом среди подобных разработок. Много или мало 72 кубита для решения задач взлома хотя бы, например, алгоритма факторизации RSA? Если рассматривать n обычных бит, то из 2n возможных состояний в один момент времени можно выбрать лишь одно, в то время как n кубитов в состоянии суперпозиции будут находиться в 2n состояниях одновременно. Как результат при линейном возрастании количества кубитов количество возможных состояний будет расти экспоненциально. А это, в свою очередь, означает, что квантовый компьютер с большим количеством кубитов будет обладать исключительной вычислительной мощностью. Учитывая новейшие разработки в области квантовых вычислений, специалисты оценивают различия по мощности между квантовым и обычным компьютером не менее чем в миллиарды раз. При этом главное преимущество квантовый компьютер будет иметь именно при решении математических задач, связанных с переборами вариантов.

Тем не менее даже такая существенная вычислительная мощность может оказаться недостаточной, чтобы легко взламывать криптоалгоритмы с открытым ключом. Необходимое для этого число кубитов исчисляется гораздо большими величинами: например, для алгоритма факторизации RSA с ключом в 2048 бит потребуется ровно вдвое больше кубитов. Эти данные рассчитаны на базе вычислительных требований гибридного (содержащего как классическую, так и квантовую части) алгоритма, представленного в 1994 году американским ученым, специалистом в области квантовой информатики Питером Шором. Для взлома же эллиптической криптографии необходимое количество кубитов, как ни странно, меньше: для ключей в 256 бит потребуется 1536 кубитов, а для 512 бит – 3072. Учитывая скорость роста производительности квантовых компьютеров (а она на данный момент превышает закон Мура), до момента, когда самые популярные криптоалгоритмы сдадут свои позиции, остались, возможно, считаные годы. И о решении этой потенциальной угрозы специалистам-криптографам необходимо позаботиться уже сейчас.

Все не так страшно, как может показаться на первый взгляд. Уже разработан ряд алгоритмов асимметричной криптографии, которые остаются устойчивыми к квантовому перебору даже с использованием достаточно большого количества кубитов. Такие алгоритмы называют «постквантовыми», и о некоторых из них мы поговорим. В частности, о подписях Лэмпорта, криптографии на решетках и об изогениях эллиптических кривых.

Формирование цифровой электронной подписи на базе алгоритма Лэмпорта представляет собой использование криптографической хеш-функции и генератора случайных чисел. Создается 256 пар случайных чисел длиной по 256 бит каждое. Этот набор данных суммарным объемом 16 килобайт и будет являться секретным ключом. Каждая из 256-битных пар хешируется, и эти 512 хешей представляют собой открытый ключ. Затем на базе секретного ключа формируется электронная подпись для отправляемого сообщения. Как известно, чтобы подписать сообщение электронной подписью, его сначала надо хешировать. А затем составляется электронная подпись, в которой для каждого значения бита хеша сообщения (нуля или единицы) выбирается либо первое, либо второе число из пары секретного ключа, соответствующей порядковому номеру бита в хеше.

Криптостойкость данного алгоритма зависит от типа используемой хеш-функции. С учетом того, что процедура хеширования имеет сугубо односторонний характер, а также того факта, что хешируется значительное количество данных (256 пар), задачу обратного восстановления секретного ключа из открытого не способен решить даже квантовый компьютер. Но этот алгоритм тоже не совершенен. Во-первых, ключи имеют существенный размер (до 16 килобайт). Во-вторых, при формировании электронной подписи данным алгоритмом половина секретного ключа становится фактически публичным достоянием. Поэтому подпись на базе одного ключа целесообразно использовать лишь единожды, что также создает значительные неудобства для проектирования систем на базе этого алгоритма.

Следующий алгоритм, который также считается постквантовым, – это так называемая «криптография на решетках». Решеткой в математике называют периодическую сеть точек в n-мерной системе координат, где задано число n «базисных векторов», порождающих саму решетку. Вот простой пример решетки для прямоугольной системы координат с двумя заданными базисными векторами.



Сложная для вычисления задача в данном алгоритме – это нахождение так называемого SVP (Shortest Vector Problem) или «наиболее короткого вектора» для заданных базисных векторов при условии существенного увеличения размерности пространства n. Если рассматривать обыкновенную плоскую двумерную решетку, то найти глазами точку, наиболее близкую к заданному узлу решетки, для человека не составляет никакого труда. Однако если это будет делать компьютер, то в ход пойдут непростые математические вычисления. А если начать увеличивать количество пространственных измерений, то процесс превратится в весьма серьезную вычислительную задачу. Считается, что на данный момент сложность такой задачи превышает возможности квантового компьютера. Впрочем, из алгоритмов, базирующихся на криптографии на решетках, неуязвимым пока признается только непосредственно само шифрование. Цифровая электронная подпись уже подверглась взлому в 1999 году, а ее модифицированная версия – в 2006 году. В настоящее время математики работают над дальнейшим развитием алгоритма ЭЦП, чтобы разрешить эту проблему и предложить индустрии новый, более совершенный стандарт криптографической безопасности.

Наконец, рассмотрим, возможно, самый перспективный на текущий момент алгоритм – использование криптографии на базе изогений эллиптических кривых. Изогения – это метод, позволяющий отобразить точку, принадлежащую одной эллиптической кривой, в точку на другой кривой подобного же типа. Алгоритм преобразования точек представляет собой соотношение двух полиномов (многочленов) для каждой из координат точки по осям x и y. В случае если получить такое отображение считается математически возможным, то эти две кривые будут являться изогенными по отношению друг к другу. Для каждой из кривой можно рассчитать так называемый «j-инвариант», являющийся чем-то вроде «классификатора» эллиптической кривой и представленный в виде обычного числа. Для расчета j-инварианта используются коэффициенты из уравнения эллиптической кривой. Применяя различные значения коэффициентов, рассчитывают множество инвариантов, которые затем отображаются в виде графа. В полученном графе инварианты становятся его вершинами, а ребрами графа служат соединения тех инвариантов, эллиптические кривые которых изогенны друг другу. Собственно, нахождение путей в графе между вершинами или, другими словами, вычисление изогении между различными эллиптическими кривыми и есть та сложновычислимая задача, на базе которой строится данный криптографический алгоритм. Структуры, построенные на основе последовательно наложенных друг на друга графов эллиптических кривых, представляют собой очень красивые геометрические объекты, как, например, сложная «звезда изогений», показанная на рисунке:



Очевидно, что применение изогений существенно усложняет эллиптическую криптографию. Если в классическом варианте мы имеем дело только с одной эллиптической кривой, то в случае с изогениями – с целым их «семейством», что возводит решение задачи в дополнительную степень сложности. Даже квантовому компьютеру не под силу решить эту задачу за субэкспоненциальное время, что говорит об исключительной криптостойкости алгоритма, который с полной уверенностью можно считать «постквантовым». Скорее всего, данный алгоритм на текущий момент является наиболее пригодным для построения на его основе блокчейн-проектов, которые стремятся обеспечить максимальную безопасность данных для своих пользователей. А в свете активно развивающейся индустрии квантовых вычислений эта проблема становится действительно актуальной.


Страницы книги >> Предыдущая | 1 2 3 4 5 | Следующая
  • 0 Оценок: 0

Правообладателям!

Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.

Читателям!

Оплатили, но не знаете что делать дальше?


Популярные книги за неделю


Рекомендации