DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.22K subscribers
143 photos
2 videos
8 files
976 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Мой товарищ (пусть и не близкий) Райан опубликовал новую книгу по Rails и GraphQL. Я не читал пока, но предыдущие релизы у него были весьма приличные https://leanpub.com/graphql-rails
🔥15
Starship - это "расширение" для обычной командной строки, которое работает во всех ОС и большинстве терминалов. Он добавляет подсказки, цветовые схемы и прочие штуки. Я попробовал, мне понравилось - вместе с ConEmu полёт нормальный. 💫 https://starship.rs/
🔥9
Сайт, где можно увидеть сроки поддержки разнообразных версий инструментов и языков https://endoflife.date/
9
В этом уроке продолжаем говорить обо всяких штуках, связанных с криптографией. Хотелось бы обсудить, как именно компьютер "загадывает" случайные числа, то есть откуда вообще они берутся? Какие там алгоритмы? Узнаем, почему числа псевдорандомные, когда эта рандомность может выйти боком и как это победить. Также напишем свой алгоритм для потокового шифрования данных. https://www.youtube.com/watch?v=q9PWljGSpKY
7🔥3👍2
Оказывается, уже год прошёл со съёмок нашего клипа... С одной стороны - как летит время, а с другой - сколько всего произошло (увы, далеко не всегда хорошего). https://www.youtube.com/watch?v=VdVI8xC04bI
🤯3
Сегодня в Швеции. Приехали поздно, уже ночь, а солнце как будто и не село.
👍23🔥1👀1
В этом уроке по Solidity мы узнаем, как с помощью ораклов (oracles) генерировать надёжные случайные числа. Мы узнаем, что такое VRF (Verifiable Randomness Function), как это работает за кулисами и как генерировать такие числа самостоятельно в своих контрактах. https://www.youtube.com/watch?v=7v-MiN2OOd4
🔥124👏1
Когда забыл убрать тестовый текст и опубликовал на продакшене... В титре написано буквально "бурый медведь - мягкий, жмякательный парень" 😂
😁15🤡3🔥2
В этом уроке по Elixir мы поговорим об OTP (Open Telecommunication Protocol) и в частности о GenServer, который позволяет легко создавать собственные сервера. Для демонстрации мы сделаем новое приложение с помощью mix и напишем игру game of stones для двух участников, которая и будет построена по принципу клиент-сервер. https://www.youtube.com/watch?v=DCjRQUWK1HM
🔥8
В следующий понедельник залетайте на стрим! В этот раз мы обсудим, что такое ECC (криптография эллиптической кривой), как это вообще всё работает и зачем нужно, как генерируются ключевые пары, какие есть особенности у этого подхода и почему он лучше, чем классический RSA, и как он применяется в Ethereum (и не только). https://youtube.com/live/q51qT9MRbLs?feature=share
🔥54👍1
Итак, друзья, как и обещано, в понедельник у нас стрим - это открытый урок на GuideDAO, будем работать сразу на двух площадках. По этому поводу также рад предложить всем подписчикам интересный бонус 😄

Хочешь стать Web3-разработчиком?

Мои друзья из GUIDE DAO предлагают скидку 0,15 ETH на все крипто-буткемпы по промокоду KRUK! Материалы этих буткемов подготовлены в том числе и мной.

Учись с нуля, иди до первого оффера, выбирай, что тебе больше нравится.

Оплачиваешь буткемп – получаешь пожизненный доступ ко всему: стримам, семинарам, сессиям по кодингу. Любые активности – все в твоем распоряжении.

Наставники и HR-партнеры подготовят к собеседованию, помогут с кодом, проведут тренинг по собесам и научат не терять голову на вопросах.

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

Жми на ссылку: ПЕРЕЙТИ (https://www.guidedao.xyz/?utm_source=partner&utm_medium=krukowski&utm_campaign=telegram&utm_content=zakrep&utm_term=kruk15)
Выбирай буткемп
Используй промокод: KRUK
5👏1
Я, в общем-то, не хочу превращаться в трэвел-блогера, тем более, что с 2020 года вообще почти никуда не выезжал, но раз уж зашла речь, немного поделюсь впечатлениями о Швеции.

Хотя ехали мы сюда в первую очередь по делам, было время и на то, чтобы просто побродить по столице и окрестностям. Итак, заметки на манжетах:

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

- Цены, как и в других скандинавских странах, достаточно высокие. Ну, то есть как - обычные продукты в магазинах не сильно дороже, чем в среднем по больнице, но если есть желание пойти куда-нибудь поесть, то это, в общем, недешёвое предприятие. Обычный ужин на двоих может стоить в духе 80-100 евро (тут в ходу крона, так что цены приблизительные), причём в достаточно обычном месте. Хорошо, что большую часть времени мы жили за городом, где у нас была своя кухонька.

- Интересно, что алкоголь в обычных магазинах можно купить только совсем лёгкий - до 3.5 градусов. Если нужно что-то крепче, то welcome в отдельные заведения, у которых свой график работы. Честно говоря, я в такие "специальные" магазины не заходил, но слышал, что работают они чуть ли не по несколько часов в день. Пробовал местное пиво - в целом, вполне прилично.

- Общественный транспорт развит весьма достойно, причём можно купить проездной на несколько дней (или даже на год), который действует вообще на все виды: автобус, трамвай, метро, пригородные поезда и даже паромы 😊

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

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

- Были в нескольких музеях. Я вообще-то не большой фанат музеев, скажу честно - мне больше нравится на природе. Но очень понравился этнографический музей под открытым небом и музей корабля "Васа". В этнографическом музее имеется реконструкция всяких исторических домиков, и зоопарк в одном флаконе. Увы, вход дорогой, в духе 20-23 евро с носа. Музей "Васы" - это там, где стоит в натуральную величину гигантский корабль, затонувший ещё при царе Горохе (потом его удалось поднять). Вообще, когда вы допускаете ошибки, то вспоминайте про "Васу", тк этот гигант своего времени затонул в первом же плавании, только выйдя из порта - его неправильно сконструировали. Были также в музее северных стран, но это вообще нечто странное: там один этаж занимают какие-то шмотки из Британии и Парижа (?), а интересная часть экспозиции проходится минут за 10-15.

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

- Дороги хорошие, много велодорожек с отличной проектировкой. Бензин дороже, чем у нас (около 1.7-1.8 евро, кажется). Водители в целом вежливые. Полиции мало, по-моему, всего один раз встречали машину с мигалками.

- Как уже писал выше, поздним вечером город как будто вымирает, активность только в центре. Можно идти по улице и долгое время вообще не встретить ни одного человека.
👍13
- Это страна, где любят хоккей и тяжёлую музыку 🤟 Впрочем, ребят с патлами встречал не так, что очень часто. 😀

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

- Я грешным делом думал даже попробовать передать "коллегам" из группы Garmarna кое-какие сувениры, но подумал, что это будет уж как-то слишком 😅 Ладно, пока мы тут готовим кавер на одну их песню, посмотрим на реакцию.

В общем, впечатления хорошие, но свои особенности, безусловно, есть. Спасибо за внимание, скоро увидимся 🙌 https://www.youtube.com/watch?v=hLxvS4Frxy8
👍123❤‍🔥1
Итак, по следам сегодняшней лекции о криптографии эллиптической кривой (ECC), давайте зафиксируем важные вещи.

Первый вопрос: зачем всё это надо? Дело в том, что (применительно к Ethereum) любая транзакция должна быть подписана пользователем. Мы должны подтвердить, что, условно говоря, вот этот денежный перевод со своего кошелька делаю действительно я, а не какой-то неизвестный товарищ. Если говорить из общих соображений, то подпись транзакции можно представить высчитывание её хэша и затем шифрование получившегося хэша с помощью закрытого ключа (private key) пользователя. Закрытый ключ, как подсказывает название, известен лишь самому юзеру.

Принимающая сторона берёт транзакцию и тоже считает её хэш, после чего расшифровывает присланную подпись. Расшифровка происходит с помощью открытого ключа пользователя, который может быть известен кому угодно. Если хэши совпали, то всё хорошо, если нет - где-то есть проблема. Кроме того, мы знаем, что в том же Solidity есть ecrecover, которая может сказать, кто именно подписал сообщение.

Другой пример - это использование ассиметричного шифрования для так называемого handshake, когда две стороны вырабатывают общий ключ. Этот ключ используется во время обмена данными (например, по https). Про это мы говорили в лекции по RSA.

Из всего этого мы делаем простой вывод: наличие открытого и закрытого ключа принципиально важно для криптовалют и не только. И вот тут-то мы задаёмся другим вопросом: а откуда эти ключи взять и как сделать их надёжными? В частности, нам нужно, чтобы на основе известного закрытого ключа можно было легко посчитать открытый, но ни в коем случае не наоборот, иначе закрытые ключи пользователей будут скомпрометированы! Собственно говоря, над этой проблемой, в том числе, и работают криптографы. Один вариант - это использовать старый добрый RSA, где ключами выступают обычные числа (только очень большие). Но мир не стоит на месте, и поэтому был придуман другой подход, который и основывается на эллиптической кривой. Он быстрее, надёжнее и менее ресурсозатратен, что особенно важно для маломощных устройств.

Таким образом, мы поняли, зачем вообще этот ECC нужен - мы можем использовать эллиптические кривые, чтобы создавать надёжные ключи. Что же это за кривые такие? В общем случае у таких кривых довольно длинное уравнение, но в крипте мы работаем с кривыми Вейерштрасса, которые попроще. Описываются они как y ** 2 = x ** 3 + a * x + b, где ** - это возведение в степень. a и b - это параметры кривой, которые подбираются криптографами и могут варьироваться в зависимости от стандарта (важно то, что эти параметры известны всем). К примеру, для Bitcoin и Ethereum используется кривая под названием secp256k1, параметры которой равны 0 и 7 соответственно. Уравнение же превращается в y ** 2 = x ** 3 + 7.

Как выглядят эллиптические кривые и как меняются в зависимости от параметров можно посмотреть вот на этой визуализации https://www.desmos.com/calculator/ialhd71we3 В частности, можно видеть, что эта кривая симметрична относительно оси Х, что довольно важно (есть у неё и ряд других свойств, о которых позже).

Также следует отметить, что в ECC эти кривые строятся на конечном поле Fp (оно называется поле Галуа), где p - это натуральное число. Если говорить простым, языком, то кривая не бесконечна, а лежит в квадрате p x p. В существующих стандартах число p очень большое. К примеру, для кривой secp256k1 значение p равно 2 ** 190 - 1 - это совершенно гигантское число. Спецификацию можно глянуть тут https://en.bitcoin.it/wiki/Secp256k1 Это нужно для того, чтобы мы могли сгенерировать очень много потенциальных ключевых пар. Поэтому фактически мы можем сказать, что наше уравнение трансформируется в y ** 2 = x ** 3 + 7 (mod p), где mod - остаток от деления.
👍16❤‍🔥2🤯2
Ещё один важный момент заключается в том, что в ECC мы работаем только с целыми числами, поэтому на нашей кривой нас интересуют только точки, чьи координаты x и y целые. Кстати, проверить, принадлежит ли точка кривой можно очень легко - для этого нужно решить уравнение x ** 3 + 7 - y ** 2 = 0 (опять таки с mod p). Если равенство нулю есть, то точка лежит на кривой.

На поле Галуа, где лежит кривая, можно выполнять математические операции над точками - в частности, сложение и умножение, причём результатом будет другая точка. А вот зачем нужны эти операции, поговорим во второй части.
👍10😱2❤‍🔥1
Знаете, у меня сейчас небольшой спор был с товарищем (это который исполнял роль "ученика" в видео по Ruby). На мой взгляд, подход "идеально или никак" - это зло.

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

Помнится ещё такой случай, который произошёл ещё чуть ли не до эпохи исторического материализма. Учился я в 11 классе и мне предложили съездить на олимпиаду по литературе. Вообще, странно, так как на многих был, а вот на такой - впервые, хотя к тому моменту какие-то паршивые рассказы я пописывал, а один даже вышел в малоизвестном журнале. Ну, в общем, согласился, но сказал честно, что у меня времени будет мало, так как вечером нужно спешить в институт, там вовсю идёт подготовка к экзаменам.

Прихожу, говорят: выбирайте, о чём будете писать. Ну, дескать, по прозе или по стихотворению. Все выбрали прозу, а я подумал - там ведь наверняка длинный рассказ, который ещё и читать придётся. Да ну его, этот рассказ. Выбрал стихотворение, а оно и впрямь короткое. 😂 Дальше было просто - нужно написать свои мысли про прочитанному, причём, как ни странно безо всяких "что хотел сказать автор". Просто развёрнутое сочинение. Дело-то, в целом, нехитрое, только время сильно поджимало, так что я просто как мог написал начисто, безо всяких перепроверок, и сдал это дело, после чего откланялся самым первым.

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

Та же ситуация и с приложениями, которые мы пишем. Да, это будет неидеальная версия. Да, будет кривая и косая, ещё и с багами. Но это нормально, ведь версия-то первая. Или вторая или даже десятая. Вспомните Windows circa 98.

Впрочем, это не значит, что нужно ко всему относится спустя рукава, конечно. Грубо говоря, к некоторым лекциям, которые всё равно выходят неидеальными, иногда приходится готовить материала страниц на 15 печатного текста. Стараться нужно, но не стоит зарубаться на том, чтобы это было лучшим делом, которое вы сделаете в жизни. Хочется верить, что такое дело ещё впереди у всех нас.

https://www.youtube.com/watch?v=scTVLy_T9jI
👍261🔥1
Вторая часть про ECC!

Так вот, мы установили, что с точками на кривой можно выполнять математические операции и это, на самом деле, принципиально важный момент, связанный с получением открытого ключа. В частности, две точки можно складывать и результатом будет другая точка на кривой. Как именно сложение происходит визуально, можно также увидеть вот на этом сервисе https://www.desmos.com/calculator/ialhd71we3 В частности, на нём вы увидите две точки - оранжевую и синюю, - через которые проведена прямая. Третья точка чёрного цвета, где эта прямая пересекает кривую, и есть результат сложения (только заметьте, что эта точка инвертирована относительно оси X и финальный результат оказывается по другую сторону).

Какие там используются формулы для сложения точек, вы можете посмотреть в умных книжках, но нас это не сильно интересует. Важно то, что этот подход мы можем использовать для получения открытого ключа. Алгоритм выглядит так:

- На кривой задаётся изначальная точка G, которая называется генераторной. Про неё ещё потом скажу пару слов в третьей части. Важно то, что для конкретного алгоритма эта точка известна абсолютно всем: к примеру, для secp256k1 её координаты равны 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798. Вы можете спросить, а почему тут только одна координата, но про это будет позднее. Пока просто поверьте, что это координаты точки по двум осям, только в сжатом виде.

- Мы можем сложить эту точку саму с собой - как ни странно, это тоже допустимо. В результате мы получим новую точку A, которую можно записать простым выражением A = G + G. Ну, а коль скоро у нас есть сложение, то и умножение мы тоже можем сделать, то есть A = 2 * G. Кстати, на мой скромный взгляд, во многих руководствах вот этому моменту вообще не уделяется внимания. Часто пишут в духе "возьмём две точки, проведём прямую, получим третью". Но, пардон, изначально-то генераторная точка одна - откуда тогда взялась ещё и вторая?

- Затем мы можем посчитать точку B путём сложения G с уже посчитанной точкой A. B = G + A = G + 2 * G = 3 * G.

- Guess what: мы можем продолжать эту операцию сколько угодно раз. Проделайте эти вычисления самостоятельно вот на этом калькуляторе https://andrea.corbellini.name/ecc/interactive/modk-add.html введя параметры a = 0, b = 7, p = 17 (маленькое поле для простоты, но помните, что в реальной жизни оно гигантское). Затем просто задайте координаты для обеих точек в (15, 13) (в калькуляторе эти точки названы P и Q, но суть не меняется) и вы увидите, что результатом сложения выступит точка (2, 10). Потом можете повторить сложение (15, 13) и (2, 10), и так далее.

Вспоминается старый анекдот: куда мы попадём, если будем долго бурить землю на экваторе? Видимо, в сумасшедший дом. Тут можно задать тот же вопрос: где мы окажемся, если будем повторять это умножение и, самое главное, нафига вообще это нужно?

- Ответ на первый вопрос очень простой: в конце концов мы окажемся в какой-то точке на кривой, обозначенной P, у которой также есть координаты x и y, причём выражены они тоже целыми числами.

- Ответ на второй вопрос тоже не сильно сложный: координаты финальной точки P будут выступать открытым ключом. Да, это два числа, но мы можем просто слепить их воедино. К примеру, для Ethereum каждая координата имеет размерность 256 бит, значит две координаты дают размерность 512 бит - это и есть размер открытого ключа в несжатом виде.

Ладно, а где тогда закрытый ключ? А закрытый ключ, дорогие друзья, - это то число, на которое мы умножаем G. Скажем, в примере выше у нас получилось, что B = 3 * G, значит закрытый ключ k равен 3. Естественно, это очень простой пример, а в реальности же закрытые ключи лежат в диапазоне от 1 до 2 ** 256 - 1, то есть опять же числа нереально здоровые. Закрытый ключ можно получить хотя бы из мнемонической фразы, которая пропущена через тот же keccak256 - так как алгоритм гарантирует, что выходное шестнадцатиричное число будет меньше, чем 2 ** 256, то нас это прекрасным образом устраивает (хотя схемы могут быть сложнее).
🔥4🤯2❤‍🔥1👍1