Как стать автором
Обновить
17
0
SinteZ @sintez

Пользователь

Смарт-карты. Часть 3. TLV

Время на прочтение 5 мин
Количество просмотров 29K
Привет, Гиктаймс!

В прошлой части мы видели как происходит общение между терминалом и картой. Мы посмотрели форматы C-APDU и R-APDU, но мы не обращали внимания на то, какие данные содержат эти APDU. В этой части мы рассмотрим самые распространенные форматы, в которых передается информация между терминалом и картой (и наоборот). Все они относятся к одному семейству — TLV.

TLV означает Tag, Length, Value и используется для того, чтобы структурировать информацию. На очень абстрактном уровне, TLV можно рассматривать как бинарную версию XML. Однако что такое Tag, Length, Value?

  • Tag: он говорит, какой вид информации находится в TLV. Видом может быть, к примеру, простая строка или номер, идентификатор или даже сложная структура. В некоторых вариантах Tag также содержит мета-информацию о TLV.
  • Length: длина, в байтах, элемента Value.
  • Value: данные, содержащиеся в TLV

Каждый вариант TLV имеет свои правила кодирования каждого элемента. Далее мы посмотрим самые распространенные варианты TLV. Хочу сразу отметить, что данная статья будет, в основном, посвящена BER-TLV, поскольку это самый распространенный, гибкий и сложный формат. Остальные варианты TLV будут рассмотрены лишь вкратце.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 5

Работаем со смарт-картами, используя Python (часть 1)

Время на прочтение 9 мин
Количество просмотров 17K

Сначала, на момент задумки, в 2014 году, данная статья планировалась как единая публикация, но, проработав материал (лень вынудила растянуть этот процесс), я понял, что необходимо её разделить на две части:


  1. Знакомство с библиотекой и написание/разбор кода специального командного процессора, который ее использует.
  2. Использование командного процессора из ч.1 для чтения содержимого файла с симки, которую я, однажды, подобрал на улице (никаких персональных данных раскрыто не будет). Узнаем, как отучить Windows встревать в наше взаимодействие с картой, а также, возможно, затронем тему выбора (активации) системного приложения на карте (если моя экспериментальная карта окажется UICC).

Думаю, для профи-карточников первая часть будет представлять бо́льший интерес, а вторая часть будет интересна, прежде всего, новичкам в этой теме (и будет иметь метку Tutorial).

Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 15

Смарт-карты. Часть 2. APDU

Время на прочтение 5 мин
Количество просмотров 51K
Привет, Гиктаймс!

После общей информации, описанной в первой части, сегодня поговорим об APDU в формате, описанном в стандарте ISO7816-4.

APDU (application protocol data unit) — это формат общения карты и терминала. Терминал посылает Command APDU (C-APDU), а карта отвечает с Response APDU (R-APDU).

C-APDU


Формат C-APDU таков:
Header Body
CLA INS P1 P2 [Lc field] [Data field] [Le field]

Каждый элемент заголовка (header) сохранен на одном байте и является обязательным. К заголовку вернемся чуть позже, сейчас поговорим о body команды.

Элементы body следующие:

  • Lc: длина элемента Data в байтах.
  • Data: данные команды.
  • Le: ожидаемая длина данных ответа в байтах, исключая длину Status Word.


Lc и Le, если присутствуют, могут занимать 1 (Short Length) или 3 байта (Extended Length) каждый. При Short Length кодируются значения от 1 до 256. Длина данных на 256 байтов записывается как «00». При Extended Length кодируются значения от 1 до 65536. Первый байт всегда «00» и остальные 2 байта — номер в формате Big Endian. Когда Lc или Le — «00 00 00», то длина данных — 65536 байтов.

В зависимости от присутствия или отсутствия элементы body команды можно разделить на 4 категории:

  • Case 1: Body полностью отсутсвует, то есть команда не содержит в себе никаких данных и не ожидается получение каких либо данных от карты при ответе.
  • Case 2: В body присутствует только Le, то есть команда не содержит в себе никаких данных, но при этом ожидается получение данных от карты.
  • Case 3: В body присутствуют Lc и Data, то есть команда содержит в себе данные, но при этом не ожидается получение данных от карты.
  • Case 4: В body присутствуют все элементы, а значит команда содержит в себе данные и ожидается получение данных от карты.

Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 0

Настраиваем отказоустойчивость Pi-Hole в связке с Mikrotik

Время на прочтение 6 мин
Количество просмотров 37K

В прошлой статье мы внедрили домашний сервер DoH с использованием Pi-Hole, чем не только пофильтровали большое количество рекламы, но и инкапсулировали наши DNS-запросы в HTTPS, что вывело их из поля фильтрации запросов оператором связи.

Всем замечательно это решение, но у него есть один нюанс. Если вдруг у нас закончились деньги на счету у оператора связи или по каким-то другим причинам пропал канал связи до внешнего мира, мы даже не сможем пополнить счет, чтобы восстановить сервис, потому что не будет работать DNS. Или, например, если наш Pi-Hole по каким-то причинам перестал работать - вот вроде и вся сеть работает, и гугл пингуется, а пока не пропишешь другой DNS-сервер - не будет счастья. А если вы еще в этот момент заняты чем-то другим и не можете приступить к восстановлению незамедлительно - домашние негодуют, портят радостное существование своими жалобами и даже котики, чуя общую нервозность, стремятся нагадить вам в тапки.

Огорчать котиков - дело последнее, поэтому в этой статье я опишу, как вы можете внедрить автоматическое переключение с использования Pi-Hole на использование операторских (как, впрочем, и любых других) DNS при проблемах на Pi-Hole.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 19

Смотрим любое кино мгновенно

Время на прочтение 2 мин
Количество просмотров 144K

После ареста серверов Moonwalk жить стало в разы труднее. Лично я уже совсем отвык от торрентов. Нужно что-то качать, ждать, чем-то открывать, куда-то кликать, иногда еще и место на диске кончается. Как можно ждать час пока скачается фильм? За час можно жизнь прожить. Пришлось искать решение, которое позволит смотреть кино также просто, как и раньше. Норматив: от идеи посмотреть что-нибудь до начала просмотра - не более минуты.

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

Читать далее
Всего голосов 94: ↑80 и ↓14 +66
Комментарии 266

Менеджер приложений для Windows Mobile

Время на прочтение 4 мин
Количество просмотров 6.6K

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

Читать далее
Всего голосов 28: ↑28 и ↓0 +28
Комментарии 24

Apache Kafka в вопросах и ответах

Время на прочтение 29 мин
Количество просмотров 23K

Что такое Kafka? Где стоит, а где не стоит применять этот инструмент? Чем Kafka отличается от RabbitMQ и других брокеров сообщений? Как её правильно эксплуатировать? Всё это обсудили на митапе «Apache Kafka в вопросах и ответах», который Слёрм провёл в ноябре 2020. В разговоре участвовали спикеры из Авито, Stripe, ITSumma и Confluent. Запись митапа доступна на YouTube, а текстовую версию разговора читайте ниже.


Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 7

1008F — или как раскирпичить свой Mac

Время на прочтение 4 мин
Количество просмотров 37K

Всем привет! В этом посте речь пойдет о бесконечном режиме восстановления macOS, ошибках 1008F, 2003F, 2004F и о том как их побороть. 

Подобные ошибки можно встретить при попытке выполнить Internet Recovery своего Mac, а причин побуждающих к этому действию - множество. В моем случае, дело было так..

Читать далее
Всего голосов 43: ↑41 и ↓2 +39
Комментарии 18

Как работает память в Python

Время на прочтение 7 мин
Количество просмотров 59K

Ни одна компьютерная программа не может работать без данных. А данные, чтобы программа имела к ним доступ, должны располагаться в оперативной памяти вашего компьютера. Но что такое оперативная память на самом деле? Когда произносишь это словосочетание, многие сразу представляют «железную» плашку, вставленную в материнскую плату, на которой написано что-то типа 16Gb DDR4 2666MHz. И они, разумеется, правы — это действительно физический блок оперативной памяти, в котором, в итоге, все данные и оказываются. Но прежде, чем стать доступной внутри вашей программы, на память (как и на всё остальное аппаратное обеспечение) накладывается куча абстракций.

Читать далее
Всего голосов 65: ↑63 и ↓2 +61
Комментарии 10

Авалония для самых маленьких

Время на прочтение 8 мин
Количество просмотров 25K
В свежем превью Rider, помимо прочего, появилась поддержка Авалонии. Авалония — это самый крупный .NET фреймворк для разработки кроссплатформенного UI, и его поддержка в IDE — отличный повод наконец разобраться, как писать десктопные приложения для любых платформ.

В этой статье я на примере простой задачи по реализации калькулятора покажу:

  • как управлять разметкой,
  • как связывать функциональность с компонентами,
  • как управлять стилями.


Читать дальше →
Всего голосов 43: ↑43 и ↓0 +43
Комментарии 34

Оспа — апокалипсис в стране восходящего солнца

Время на прочтение 10 мин
Количество просмотров 30K

Древние айны заселили японский архипелаг 15 000 лет назад и до 5го столетия нашей эры этот период истории Японии назывался Дзёмон. На земле восходящего солнца росли и процветали рыбацкие поселения, общины охотников и собирателей, земледельцев. Родоплеменные сообщества правили островами, так продолжалось до тех пор пока разрозненные протогосударственные образования не объединил свет Сына Солнца, Покинувшего дом отгадывать бездействие духов, или Каму-Ямато-Иварэбико-но-Микото, или если кратко - императора Дзимму, первого императора Японии, жившего и мудро царствовашего в 7 веке до нашей эры. От истоков государственности, будто весенние потоки ручьев с самой Фудзиямы, быстро росло и множилось население Японии, чтобы занять свое место в истории. Почти 14 столетий спустя появления Сына Солнца, к моменту когда к власти пришел принц Сётоку Умаядо, Добродетельный, Япония уже вполне окрепла. В прочем это была ещё не Япония ("Ниппон" - место, где восходит солнце), а Ямато ("Великая гармония"). В то далекое время жители страны Великой гармонии прочно стояли на Пути богов (Синто). Традиционные верования - синтоизм - уходят корнями в Дзёмон так глубоко, что, скорее всего, являются прямыми отголосками первых культов палеолита и неолита.

Читать далее
Всего голосов 112: ↑110 и ↓2 +108
Комментарии 16

Как я подключил официальный бизнес API WhatsApp через Twilio

Время на прочтение 8 мин
Количество просмотров 23K
Как известно, WhatsApp не так давно начал предоставлять доступ к своему официальному бизнес API, который так необходим для создания чат-ботов для этого мессенджера «белыми» методами.

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

Одним из таких доступных партнеров является американская компания Twilio. Самое основное их преимущество на мой взгляд, это невысокая стоимость использования WhatsApp Business API.

Я подключил через Twilio официальный бизнес API WhatsApp и сейчас подробно расскажу, как это сделать.

WhatsApp Messenger
Читать дальше →
Всего голосов 15: ↑12 и ↓3 +9
Комментарии 16

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

Время на прочтение 8 мин
Количество просмотров 44K


Я каждый день пишу код на сишарпе, и натыкаюсь на одну проблему: я трачу кучу времени на то, чтобы решить, как быть, если что-то идёт не по плану.

У меня есть приличный опыт работы с другими языками программирования, и стандартный подход по работе с ошибками в C# мне не нравится. Но языки и платформы устроены так, что ты решаешь проблемы не как считаешь нужным, а так, как принято.

Эти размышления меня измучили, и я систематизировал свои знания и идеи по обработке исключительных случаев.
Читать дальше →
Всего голосов 97: ↑74 и ↓23 +51
Комментарии 478

История изобретения флешки в лицах и занимательных фактах

Время на прочтение 16 мин
Количество просмотров 25K

Случаи, когда изобретатель создает сложное электротехническое устройство с нуля, полагаясь при этом исключительно на собственные изыскания, чрезвычайно редки. Как правило, те или иные девайсы рождаются на стыке сразу нескольких технологий и стандартов, созданных разными людьми в разное время. Для примера возьмем банальную флешку. Это портативный носитель данных, выполненный на базе энергонезависимой памяти NAND и оснащенный встроенным USB-портом, который используется для подключения накопителя к клиентскому устройству. Таким образом, чтобы понять, как подобный девайс в принципе мог появиться на рынке, необходимо проследить историю изобретения не только самих чипов памяти, но и соответствующего интерфейса, без которого привычных нам флешек попросту бы не существовало. Давайте же попробуем это сделать.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 44

Как писать музыку на Python — помогут три тематические библиотеки (для специалистов разного уровня)

Время на прочтение 3 мин
Количество просмотров 18K
Продолжаем тему музыкального программирования — ранее мы говорили о языках Csound, SuperCollider и Pure Data, а сегодня рассказываем Python и библиотеках FoxDot, Pippi и Music-Code.

Всего голосов 28: ↑27 и ↓1 +26
Комментарии 1

Проект Natasha. Набор качественных открытых инструментов для обработки естественного русского языка (NLP)

Время на прочтение 34 мин
Количество просмотров 84K
Два года назад я писал на Хабр статью про Yargy-парсер и библиотеку Natasha, рассказывал про решение задачи NER для русского языка, построенное на правилах. Проект хорошо приняли. Yargy-парсер заменил яндексовый Томита-парсер в крупных проектах внутри Сбера, Интерфакса и РИА Новостей. Библиотека Natasha сейчас встроена в образовательные программы ВШЭ, МФТИ и МГУ.

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

Для новостных статей качество на всех задачах сравнимо или превосходит существующие решения. Например с задачей NER Natasha справляется на 1 процентный пункт хуже, чем Deeppavlov BERT NER (F1 PER 0.97, LOC 0.91, ORG 0.85), модель весит в 75 раз меньше (27МБ), работает на CPU в 2 раза быстрее (25 статей/сек), чем BERT NER на GPU.

В проекте 9 репозиториев, библиотека Natasha объединяет их под одним интерфейсом. В статье поговорим про новые инструменты, сравним их с существующими решениями: Deeppavlov, SpaCy, UDPipe.

Всего голосов 57: ↑55 и ↓2 +53
Комментарии 25

Иллюстрированное руководство по OAuth и OpenID Connect

Время на прочтение 7 мин
Количество просмотров 77K
Прим. перев.: В этом замечательном материале компании Okta просто и наглядно рассказывается о принципах работы OAuth и OIDC (OpenID Connect). Эти знания будут полезны разработчикам, системным администраторам и даже «обычным пользователям» популярных веб-приложений, которые скорее всего тоже обмениваются конфиденциальными данными с другими сервисами.

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


«Предоставьте свою банковскую учётку». — «Обещаем, что с паролем и деньгами все будет в порядке. Вот прям честно-пречестно!» *хи-хи*

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

Сегодня имеется единый стандарт, позволяющий одному сервису безопасно воспользоваться данными другого. К сожалению, подобные стандарты используют массу жаргонизмов и терминов, что усложняет их понимание. Цель этого материала — с помощью простых иллюстраций объяснить, как они работают (Думаете, что мои рисунки напоминают детскую мазню? Ну и ладно!).

Всего голосов 42: ↑40 и ↓2 +38
Комментарии 3

Введение в Си. Послание из прошлого столетия

Время на прочтение 15 мин
Количество просмотров 202K

Предисловие


Я несколько раз в своих комментариях ссылался на книгу Эндрю Таненбаума «Operating Systems Design and Implementation» на ее первое издание и на то, как в ней представлен язык Си. И эти комментарии всегда вызывали интерес. Я решил, что пришло время опубликовать перевод этого введения в язык Си. Оно по-прежнему актуально. Хотя наверняка найдутся и те, кто не слышал о языке программировании PL/1, а может даже и об операционной системе Minix.

Это описание интересно также и с исторической точки зрения и для понимания того, как далеко ушел язык Си с момента своего рождения и IT-отрасль в целом.
Читать дальше →
Всего голосов 64: ↑52 и ↓12 +40
Комментарии 104

RabbitMQ против Kafka: два разных подхода к обмену сообщениями

Время на прочтение 18 мин
Количество просмотров 297K

В прошлых двух статьях мы рассказывали об IIoT — индустриальном интернете вещей — строили архитектуру, чтобы принимать данные от сенсоров, паяли сами сенсоры. Краеугольным камнем архитектур IIoT да и вообще любых архитектур работающих с BigData является потоковая обработка данных. В ее основе лежит концепция передачи сообщений и очередей. Стандартом работы с рассылкой сообщений сейчас стала Apache Kafka. Однако, для того, чтобы разобраться в ее преимуществах (и понять ее недостатки) было бы хорошо разобраться в основах работы систем очередей в целом, механизмах их работы, шаблонах использования и основной функциональности.



Мы нашли отличную серию статей, которая сравнивает функциональность Apache Kafka и другого (незаслуженно игнорируемого) гиганта среди систем очередей — RabbitMQ. Эту серию статей мы перевели, снабдили своими комментариями и дополнили. Хотя серия и написана в декабре 2017 года, мир систем обмена сообщениями (и особенно Apache Kafka) меняется так быстро, что уже к лету 2018-го года некоторые вещи изменились.

Читать дальше →
Всего голосов 87: ↑82 и ↓5 +77
Комментарии 41

Piter GraphQL: видеозаписи с митапа в Wrike

Время на прочтение 1 мин
Количество просмотров 4.6K


24 января в офисе Wrike прошел первый в Петербурге митап по GraphQL. Чтобы разобраться в жизнеспособности хайповой технологии мы, во-первых, суммировали результаты своих исследований в этой теме, во-вторых, позвали в гости Павла Черторогова, опенсорс-мейнтейнера, который с конца 2015 года разрабатывает изоморфные приложения. Летом 2016 Павел начал разработку graphql-compose в опенсорсе.

Для тех, кто не смог прийти, мы публикуем видеозаписи докладов.
Смотреть
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 3

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность