Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
16 ноября 2012, 11:17:14 AM   # 1
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Всем привет,

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

Мое текущее предложение заключается в использовании общего класса USB HID устройство, которое можно использовать без установки драйверов на всех основных операционных систем (в частности, MS Windows). Есть некоторые ограничения, например 64 байта полезной нагрузки сообщения и сообщения может быть инициирован только с помощью компьютера (опрос).

Я хочу использовать HID протокол так же, как транспорт для протокола более высокого уровня, вместо того, чтобы использовать некоторые пользовательские двоичный формат. Нет, на этот раз я не собираюсь предлагать JSON-RPC :-), но я думаю, что протокол Буферы является хорошим выбором. Там существует несколько легких реализаций для микроконтроллеров, это супер-легкое в использовании PB из всех основных языков программирования и хорошо определен высокий уровня протокола (в сравнительном до некоторого заказного протокола поверх HID сообщений).

Там мой текущий проект прото файла: https://github.com/slush0/bitkeylib-python/blob/master/protobuf/bitkey.proto

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

слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть


Как заработать Биткоины?
Без вложений. Не майнинг.


16 ноября 2012, 11:17:26 AM   # 2
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Получил 1806 Биткоинов
Реальная история.





Как кодировать Protobuf сообщение в поток?

Закодированные Protobuf сообщение содержит только само сообщение полезной нагрузки. Там нет заголовка или терминатора; По этой причине мы должны определить поток кодер / декодер для Protobuf сообщений.

Каждое сообщение Protobuf будет кодироваться в поток следующим образом:

а) Первые два символа является магическим идентификатором "##" (0x23, 0x23).
б) 2В идентификатор сообщения (кодируется как большой обратный порядок байт без знака краткости).
с) 4В длины сообщения (кодируется как большой обратный порядок байт без знака Int).
г) полезной нагрузки в двоичной кодировке РВ сообщение.

Там должны быть стандартизированы отображение между ID сообщения и Protobuf определения сообщения. Сейчас я использую следующее отображение: https://github.com/slush0/bitkeylib-python/blob/master/bitkeylib/mapping.py но я открыт для обсуждения этой темы.

Демонстрационный кодер / декодер в питоне реализован здесь: https://github.com/slush0/bitkeylib-python/blob/master/bitkeylib/transport.py

Как кодировать Protobuf потока в HID сообщений:

1. Поток сообщений Сотроза РВА, как описано выше
2. Разделить строку 63 байт полезной нагрузки длиной чушек
3. Для каждой порции создать HID сообщение в формате: размер 1B = куска (0x01-0x3f), 0-63B PB полезную нагрузку

Почему закодировать размер куска в сообщение? Некоторые контроллеры USB HID использовать более высокие значения первого символа (>0x3f) для пользовательских команд, как изменение перепрограммирования идентификатора поставщика и т.д. Хранение размера порции в 0-й символе сообщения будет делать протокол совместит с широким спектром существующих контроллеров.

Обратите внимание, что я начну играть с некоторыми контроллерами HID на следующей неделе (я жду образцов), так что, возможно, это будет предметом изменений.

Стандартный поток сообщений:

Все коммуникации всегда инициируется компьютером. Прибор пассивен и отвечает с заранее определенными наборами ответов для каждого запроса.

1. Компьютер должен начать общение с "инициализировать" сообщение. Это говорит устройство, чтобы перезапустить его текущее состояние и реагировать с "Особенности" сообщение.
2. Компьютер может запросить UUID устройства. Это MCU уникального двоичной строки отождествления устройства (серийный номер), контроллер USB не устройство. Хотя контроллеры USB могут сообщить идентификатор поставщика, идентификатор продукта и так далее, очень вероятно, что DYI хакеры не смогут модифицировать контроллеры USB самостоятельно (это требует дополнительных усилий), так Bitcoin клиент должен использовать UUID в отличие от две лексемы.
3. Хотя некоторые ответы отправляются на устройство немедленно (как GetUUID), большинство из них являются блокирующими, потому что требует ручного подтверждения (нажатие кнопки) пользователем. Биткойн клиент должен знать об этом и осуществлять связь с устройством в отдельном потоке, чтобы не блокировать пользовательский интерфейс клиента или другие функциональные возможности.

Дополнительная защита:

Все важные меры должны быть подтверждены нажатием кнопки на устройстве пользователя. Некоторые пользователи по-прежнему хотят использовать дополнительную защиту:

1. One Time Password - при включении устройства печатает несколько символов на его внутренний дисплей и отправить "OtpRequest" Ответ на компьютер. Пользователь должен перепечатывать OTP от дисплея к компьютеру. затем Компьютер посылает "OtpAck" сообщение. Если правильно, устройство посылает ответ первоначального запроса на компьютер. OTP предотвращает пользователю нажать на кнопку случайно. Введя четыре символа на клавиатуре, пользователь подтверждает, что он действительно хочет, чтобы выполнить это действие.

2. PIN (пароль) защита - Несмотря на то, кражу Bitcoins из взломанных машины невозможно, злоумышленник все еще есть физический доступ к маркеру. По этой причине, устройство может быть защищен паролем. В этом случае устройство отвечает "PinRequest" к компьютеру и пользователю необходимо ввести правильный пароль к клавиатуре устройства. затем Компьютер посылает "PinAck" сообщение, содержащий пароль. Когда Corect, устройство отправить ответ первоначального запроса на компьютер. Хотя PIN не идеальная защита (особенно потому, что вы вводите ПИН-код на клавиатуру компьютера), с PIN-защищенным устройством, злоумышленник должен получить физический доступ к маркеру и иметь доступ к взломанному компьютеру, на котором пользователь ранее ввел пароль ,

Устройство может сочетать защиту OTP + PIN-код. Поток сообщений будет следующее:
Код:
С: GetEntropy ()
D: OtpRequest ()
С: OtpAck (OTP)
D: PinRequest ()
С: PinAck (контактный)
D: энтропия (энтропия)

 Наиболее параноидальна установка потребует нажатия кнопки физической, чтобы подтвердить действие, то переписывание OTP и записывать ПИН-код. Насколько я могу сказать, это все еще довольно комфортно. Переписывание четыре или пять алфавитно-цифровых символов супер просто и пароль сам по себе не нужно быть супер-долго, как это только дополнительная функция безопасности.
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 ноября 2012, 12:17:20 PM   # 3
 
 
Сообщений: 78
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Мое текущее предложение заключается в использовании общего класса USB HID устройство, которое можно использовать без установки драйверов на всех основных операционных систем (в частности, MS Windows). Есть некоторые ограничения, например 64 байта полезной нагрузки сообщения и сообщения может быть инициирован только с помощью компьютера (опрос).
Я не против того, какое устройство класса USB используется. Я думаю, что основным критерием является то, насколько легко работать с наиболее распространенными сочетаниями языков программирования и операционных систем (которые unfourtunately много комбинаций). Единственные другие классы соответствующего USB я могу думать являются HID и CDC (т.е. последовательного порта).

Есть проблемы (вы, кажется, знают о них, а) с USB последовательных портов в Windows, в частности необходимости поставлять .inf, и грубых ошибок в usbser.sys. Я собирался работать вокруг этих проблем, а не эмуляция USB-последовательный порт чипа FTDI. Каждая крупная операционная система имеет надежные драйвера для чипов FTDI включен, и протокол, кажется, довольно просто (смотреть на источниках драйверов Linux).

Преимущества реализации последовательного порта являются:
  • Легко работать с; часто операционки позволяют рассматривать их как не доступный для поиска файла.
  • Можно использовать обычные программы терминала делать отладку или микропрограммного обновления.
Там в один из основных недостатков: обнаружение устройств трудно. Там нет простого, портативного способа "знать" какой последовательный порт подключен к не посылая что-то и ждать правильного ответа.

Я думаю, что USB HID является хорошим выбором. Преимущества:
  • Позволяет выбрать VID / PID (решение эмуляции FTDI выше, требует, чтобы вы использовать VID FTDI / PID).
  • Обнаружение Простое устройство; просто запросить строку дескриптора продукта.
Единственный недостаток я столкнулся в своих исследованиях: по-видимому, в Linux, вам необходимо отсоединить драйвер ядра для того, чтобы должным образом взаимодействовать с устройством HID класса. Это может быть сделано в большинстве систем, но я волнуюсь, что он сломается на некоторых конфигурациях Linux. Пожалуйста, поправьте меня, если сейчас ситуация иная.
someone42 сейчас офлайн Пожаловаться на someone42   Ответить с цитированием Мультицитирование сообщения от someone42 Быстрый ответ на сообщение someone42

16 ноября 2012, 12:28:56 PM   # 4
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Я не против того, какое устройство класса USB используется. Я думаю, что основным критерием является то, насколько легко работать с наиболее распространенными сочетаниями языков программирования и операционных систем (которые unfourtunately много комбинаций). Единственные другие классы соответствующего USB я могу думать являются HID и CDC (т.е. последовательного порта).

В настоящее время я кодирование его для последовательного порта, а также, потому что я до сих пор не имею контроллеров USB от поставщика.

котировка
Есть проблемы (вы, кажется, знают о них, а) с USB последовательных портов в Windows, в частности необходимости поставлять .inf, и грубых ошибок в usbser.sys. Я собирался работать вокруг этих проблем, а не эмуляция USB-последовательный порт чипа FTDI. Каждая крупная операционная система имеет надежные драйвера для чипов FTDI включен, и протокол, кажется, довольно просто (смотреть на источниках драйверов Linux).

FTDI не работает в Windows, из коробки и установка немного странно. Я провел некоторое время, чтобы получить мой BFL Single работает на Win7: - /.

Мы хотим использовать USB-последовательный для щита Raspberry Pi (как RPi не годный к употреблению USB порт для HID устройства) тоже. Но с компьютером стороны, я думаю, что должно быть только один поддерживаются транспорт - USB HID.
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 ноября 2012, 12:31:06 PM   # 5
 
 
Сообщений: 78
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Я хочу использовать HID протокол так же, как транспорт для протокола более высокого уровня, вместо того, чтобы использовать некоторые пользовательские двоичный формат. Нет, я не собираюсь предлагать JSON-RPC в это время :-), но я думаю, что протокол Буферы является хорошим выбором. Там существует несколько легких реализаций для микроконтроллеров, это супер-легкое в использовании PB из всех основных языков программирования и хорошо определен высокий уровня протокола (в сравнительном до некоторого заказного протокола поверх HID сообщений).
Я собирался прийти сюда и плакаться о своем выборе буферов протокола, но после того, как немного больше исследований, я любя их больше. Их кодирование довольно постное; Я был обеспокоен тем, что было бы, как XML. Кроме того, есть крошечные библиотеки синтаксического анализа (например. Nanopb), написанные на C там.

Так что теперь я думаю, что это хорошая идея, чтобы использовать буферы протокола. Моя единственная просьба заключается в том, для всех без подписи сообщений, есть максимальный размер сообщения, указанный. Разумное значение будет что-то вроде 256 байт. Это позволяет буфера должны быть статически (т.е. без использования таНоса). Ограничение не может применяться к подписи сообщений, потому что сделки могут быть очень большими.
someone42 сейчас офлайн Пожаловаться на someone42   Ответить с цитированием Мультицитирование сообщения от someone42 Быстрый ответ на сообщение someone42

16 ноября 2012, 12:35:49 PM   # 6
 
 
Сообщения: 1512
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Хотите поговорить с ума? Как насчет Bluetooth?

Приложения...
-Передача файлов, контактные данные, календарь встреч и напоминаний между устройствами с OBEX.
-Замена предыдущих проводной RS-232 последовательной связи в контрольно-измерительной аппаратуры, GPS приемники, медицинское оборудование, сканеры штрих-кодов, а также устройств управления дорожным движением.

deepceleron сейчас офлайн Пожаловаться на deepceleron   Ответить с цитированием Мультицитирование сообщения от deepceleron Быстрый ответ на сообщение deepceleron

16 ноября 2012, 12:48:35 PM   # 7
 
 
Сообщений: 78
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

FTDI не работает в Windows, из коробки и установка немного странно. Я провел некоторое время, чтобы получить мой BFL Single работает на Win7: - /.

Мы хотим использовать USB-последовательный для щита Raspberry Pi (как RPi не годный к употреблению USB порт для HID устройства) тоже. Но с компьютером стороны, я думаю, что должно быть только один поддерживаются транспорт - USB HID.
Я ошибся FTDI драйверов на Windows.

Похоже, что это USB HID тогда.
someone42 сейчас офлайн Пожаловаться на someone42   Ответить с цитированием Мультицитирование сообщения от someone42 Быстрый ответ на сообщение someone42

16 ноября 2012, 12:49:46 PM   # 8
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Хотите поговорить с ума? Как насчет Bluetooth?

Ни в коем случае, так как батареи ...

Изменить: Однако HID над Bluetooth все еще возможен, так что даже если мы будем стандартизировать HID устройства, некоторые будущие устройства бумажника можно использовать Bluetooth и до сих пор совместимый протокол.
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 ноября 2012, 2:54:31 PM   # 9
 
 
Сообщения: 439
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

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

Отсоединение драйвер ядра только один вызов функции из libusb или аналогичной библиотеки. Кроме того, некоторые комбинации VID / PID (например те, Silabs использовать CP2110) являются IIRC не интерпретируются в ядре Linux. Так что я не думаю, что это большая проблема ...
придерживаться сейчас офлайн Пожаловаться на палку   Ответить с цитированием Мультицитирование Сообщения от палки Быстрый ответ на сообщение клюшка

16 ноября 2012, 2:56:41 PM   # 10
 
 
Сообщения: 439
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Я собирался прийти сюда и плакаться о своем выборе буферов протокола, но после того, как немного больше исследований, я любя их больше. Их кодирование довольно постное; Я был обеспокоен тем, что было бы, как XML. Кроме того, есть крошечные библиотеки синтаксического анализа (например. Nanopb), написанные на C там.

Тоже самое. Я был немного скептически, когда я увидел сгенерированный код от http://code.google.com/p/protobuf-c/ (Чистый C генератор для протокола буферов, оригинальная реализация поддерживает только C ++), но я был очень счастлив, когда я увидел код, который вышел из nanopb - http://code.google.com/p/nanopb/
придерживаться сейчас офлайн Пожаловаться на палку   Ответить с цитированием Мультицитирование Сообщения от палки Быстрый ответ на сообщение клюшка

16 ноября 2012, 3:38:36 PM   # 11
 
 
Сообщения: 1708
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Несколько пунктов и вопросы:

Тайм-аут
Вы заявляете:

Стандартный поток сообщений:
3. Хотя некоторые ответы отправляются на устройство немедленно (как GetUUID), большинство из них являются блокирующими, потому что требует ручного подтверждения (нажатие кнопки) пользователем. Биткойн клиент должен знать об этом и осуществлять связь с устройством в отдельном потоке, чтобы не блокировать пользовательский интерфейс клиента или другие функциональные возможности.

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

PIN-код обмена / OTP
В «Стандартный поток сообщений, первый пункт» вы говорите, что компьютер начинает разговор, но с PIN-кодом и OTP устройство посылает PinRequest / OTPRequest. Как это происходит в ответах на запрос компьютера GetEntropy только?

то есть действительные обмены:

С: GetEntropy ()
D: энтропия (энтропия)

или

С: GetEntropy ()
D: OtpRequest ()
С: OtpAck (OTP)
D: энтропия (энтропия)

или

С: GetEntropy ()
D: OtpRequest ()
С: OtpAck (OTP)
D: PinRequest ()
С: PinAck (контактный)
D: энтропия (энтропия)

Кроме того, он действует, чтобы иметь PinRequest / PinAck перед OtpRequest / OtpAck?

(Просто пытается придавить, какие действительные обмены и которые являются недействительными).

Контрольная сумма и Chunking / Dechunking
Имеет ли потоковый для USB гарантировали целостность? ИЭ необходимо иметь контрольную сумму для каждого из сообщения 64 байт или в том, что заботиться о в транспортном протоколе? В случае необходимости мы могли бы просто иметь 1 байт контрольной суммы = XOR (полезной нагрузки байт), т.е.

1B = длина полезной нагрузки
до 62B = полезной нагрузки
1B = контрольная сумма определяется как XOR (полезная нагрузка)

Кроме того, вы утверждать, что сообщение ПБ разбит на 64 байта пакетов. Когда они «dechunked», как вы знаете границы пакетов, чтобы сшить их вместе, чтобы воссоздать сообщения PB? Тебе нужно "это сообщение Protobuf разбито над X пакетами в начале сообщений PB.

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




jim618 сейчас офлайн Пожаловаться на jim618   Ответить с цитированием Мультицитирование сообщения от jim618 Быстрый ответ на сообщение jim618

16 ноября 2012, 4:08:19 PM   # 12
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Я думаю, что это должно быть изобретены слои первым, если он предназначен стать надежным стандартом.

Я хотел бы предложить, начиная с протоколом сообщений, который будет работоспособным через простую RS232 типа последовательной линии. Начнем с предположения, что основное обнаружение ошибок и восстановление будет необходимо, поэтому протокол не ограничивается СМИ, что имеет он встраивается. Тогда беспокоиться о добавлении абстракций к ней, как комков. USB-CDC и Bluetooth может и отрывать последовательной линии "из коробки", Если вы изобрели протокол, который сосредоточенный вокруг USB-HID, то никто, кто хочет продлить этот протокол для работы над TCP / IP или радиоволны или именованные каналы или жестяной телефоны или датчики света против мигания коробки на экране или любой другой полезные способы перемещения данных будут хотеть иметь дело с реализацией "USB-HID" непредвиденные обстоятельства, когда они не нужны.
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

16 ноября 2012, 4:13:01 PM   # 13
 
 
Сообщений: 78
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Контрольная сумма и Chunking / Dechunking
Имеет ли потоковый для USB гарантировали целостность? ИЭ необходимо иметь контрольную сумму для каждого из сообщения 64 байт или в том, что заботиться о в транспортном протоколе? В случае необходимости мы могли бы просто иметь 1 байт контрольной суммы = XOR (полезной нагрузки байт), т.е.

1B = длина полезной нагрузки
до 62B = полезной нагрузки
1B = контрольная сумма определяется как XOR (полезная нагрузка)

Кроме того, вы утверждать, что сообщение ПБ разбит на 64 байта пакетов. Когда они «dechunked», как вы знаете границы пакетов, чтобы сшить их вместе, чтобы воссоздать сообщения PB? Тебе нужно "это сообщение Protobuf разбито над X пакетами в начале сообщений PB.

Я просто думаю о том, как сделать «отрывы» и «dechunking» как простая и сомнительной, насколько это возможно. В идеале вы хотите, это глухой транспортный слой, который ничего не понимает того, что в сообщениях.
USB имеет некоторые проверки ошибок (один CRC16 для каждого пакета), так что, наверное, нет необходимости для нас реализовать его в любом месте.

А как определить границы пакета, протокол буферов, по всей видимости не хватает терминатор. Поэтому информация длина должна быть из группы:
1. Один из вариантов включает длину пакета где-нибудь. Например, длина (например. В упакованном, мало-Endian 32 битное целое число) может предшествовать в буфер протокола.
2. Другой вариант заключается в использовании длин порций. Когда вы видите кусок менее 63 байтов полезной нагрузки, вы знаете, что это конец. Обратите внимание, что, если длина пакета является кратным 63, чтобы избежать путаницы, дополнительный пакет 0-полезной нагрузки должно быть отправлено, а также.

И, наконец, немного деталей: как передается тип сообщения? Один байт предваряется в буфер протокола будет делать; но кто-нибудь есть лучшее решение?
someone42 сейчас офлайн Пожаловаться на someone42   Ответить с цитированием Мультицитирование сообщения от someone42 Быстрый ответ на сообщение someone42

16 ноября 2012, 5:38:25 PM   # 14
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Тайм-аут

Строго говоря, само устройство просто состояние машины. Я не думаю, что Defining требуется некоторый тайм-аут. Компьютер может сбросить устройство в любое время, отправив "инициализировать" сообщение, как я определено выше.

С точки зрения компьютера, некоторые "Хорошо, ничего не произошло" полностью зависит от реализации, и мы не должны указать это. Диалог подтверждения может быть открыт в течение неограниченного времени, и ничего плохого случиться ...

котировка
В «Стандартный поток сообщений, первый пункт» вы говорите, что компьютер начинает разговор, но с PIN-кодом и OTP устройство посылает PinRequest / OTPRequest. Как это происходит в ответах на запрос компьютера GetEntropy только?

PinRequest и OtpRequest могут в основном появляются в ответ на любой чувствительный вызов. GetEntropy был всего лишь один пример.

Я лично осуществлять обработку Pin / ОТР bitkeylib (питон) независимо друг от друга до самого вызова. Когда устройство ответит PinRequest или OtpRequest, библиотека просто запрашивает у пользователя ввод.

котировка
С: GetEntropy ()
D: энтропия (энтропия)

или

С: GetEntropy ()
D: OtpRequest ()
С: OtpAck (OTP)
D: энтропия (энтропия)

или

С: GetEntropy ()
D: OtpRequest ()
С: OtpAck (OTP)
D: PinRequest ()
С: PinAck (контактный)
D: энтропия (энтропия)

Кроме того, он действует, чтобы иметь PinRequest / PinAck перед OtpRequest / OtpAck?

Да, все эти комбинации могут произойти. Хотя просить OTP, прежде чем Pin иметь смысл, он делает угадывание / bruteforcing пальца практически невозможно, потому что сама попытка требует уникального OTP ...

котировка
Имеет ли потоковый для USB гарантировали целостность? ИЭ необходимо иметь контрольную сумму для каждого из сообщения 64 байт или в том, что заботиться о в транспортном протоколе? В случае необходимости мы могли бы просто иметь 1 байт контрольной суммы = XOR (полезной нагрузки байт), т.е.

USB HID очень простой протокол, и да, это гарантирует порядок и целостность. Поэтому нет необходимости добавлять его вручную.

котировка
Кроме того, вы утверждать, что сообщение ПБ разбит на 64 байта пакетов. Когда они «dechunked», как вы знаете границы пакетов, чтобы сшить их вместе, чтобы воссоздать сообщения PB? Тебе нужно "это сообщение Protobuf разбито над X пакетами в начале сообщений PB.

Вы правы, я совсем забыл описать "магический символ" а также "размер сообщения" при кодировании PB сообщения в поток. Я заполнить документацию выше в настоящее время.

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

Это именно то, как я определил его. Есть три слоя:

1. Транспорт - это просто транспортировать байты с одной стороны на другую. Я хочу иметь только один транспорт на основе USB HID в спецификации, но технически возможно использовать последовательный порт или системные разъемы, а также. Как я уже сказал, я уже тестирую протокол, используя именованные каналы. Часть транспортной спецификации (например), что один байт определяющий длину сообщения (Идентификатор отчета в срок HID).

2. Поток кодирования / декодирования. Он содержит магический символ + длину сообщения PB, чтобы сделать декодирование потока как можно проще. Я заполнить документы выше.

3. Полезная нагрузка кодирования / декодирования. Я предложил протокол Буферы, который, кажется, очень хорошо подходит для наших нужд.

Все стек сообщения не должен понимать передаваемые сообщениям себя, так что все очень гибкое.
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 ноября 2012, 5:41:16 PM   # 15
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Я хотел бы предложить, начиная с протоколом сообщений, который будет работоспособным через простую RS232 типа последовательной линии. Начнем с предположения, что основное обнаружение ошибок и восстановление будет необходимо, поэтому протокол не ограничивается СМИ, что имеет он встраивается. Тогда беспокоиться о добавлении абстракций к ней, как комков. USB-CDC и Bluetooth может и отрывать последовательной линии "из коробки", Если вы изобрели протокол, который сосредоточенный вокруг USB-HID, то никто, кто хочет продлить этот протокол для работы над TCP / IP или радиоволны или именованные каналы или жестяной телефоны или датчики света против мигания коробки на экране или любой другой полезные способы перемещения данных будут хотеть иметь дело с реализацией "USB-HID" непредвиденные обстоятельства, когда они не нужны.

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

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

16 ноября 2012, 5:51:46 PM   # 16
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Я просто добавил глава "Как кодировать Protobuf сообщение в поток?"
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 ноября 2012, 6:20:11 PM   # 17
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

Хорошая вещь. Продолжайте хорошую работу!

Я думаю, что есть USB тренажеры можно найти, что позволит сделать тестирование этого легче.

jgarzik сейчас офлайн Пожаловаться на jgarzik   Ответить с цитированием Мультицитирование сообщения от jgarzik Быстрый ответ на сообщение jgarzik

16 ноября 2012, 6:23:56 PM   # 18
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

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

Вскоре сказали, что можно использовать один и тот же протокол, как описано выше, через TCP, без каких-либо изменений.

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

Простая проверка целостности на уровне приложений является обычным делом и наилучшей практикой. Bitcoin адреса имеют проверки целостности в них, несмотря на их чаще всего передается через TCP и другие каналы, которые также имеют проверку на наличие ошибок. проверка ошибок на уровень приложений не должна изобрести ошибки транспортного уровня проверки на уровне приложений, то есть просто выбросить испорченные запросы как отказоустойчивые и подставляя действие с низким уровнем риска (например, ничего не делая) вместо того, чтобы самопроизвольные действия с дорогостоящие последствия, когда вы имеете дело с реальными деньгами. Простой 32-битный CRC и практика игнорирования сообщений, не прошедших проверку CRC будет минимальным, что любое оборудование, не должно быть никакой обработки, не будучи неразумным бременем на уровне кода приложения проблемы.

В окольным путем ... пожалуйста, просто не делают этого конкретного аппаратного поддерживающего USB.
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

16 ноября 2012, 6:30:56 PM   # 19
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

В окольным путем ... пожалуйста, просто не делают этого конкретного аппаратного поддерживающего USB.

Насколько Джим и Алан будет открыт для реализации поддержки Pigeon транспорта, нет никаких ограничений в самом протоколе.
слякоть сейчас офлайн Пожаловаться на слякоть   Ответить с цитированием Мультицитирование сообщения от слякоти Быстрый ответ на сообщение слякоть

16 ноября 2012, 6:31:34 PM   # 20
 
 
Сообщений: 78
Цитировать по имени
цитировать ответ
по умолчанию Re: протокол бумажника провода Hardware

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

Как можно заметить, nanopb в настоящее время не позволяет этого (он пропускает все поля он не признает). Но я уверен, что это можно изменить во время выполнения декодера, чтобы следовать этому соглашению.

Я вижу, что подход слякоть принял это включать в себя "Особенности" сообщение, которое перечисляет функцию бумажника в. Я думаю, что список функций несколько открыт для интерпретации. Например, что произойдет, если кошелек поддерживает только подмножество признака X? сообщать ли это, что он поддерживает функцию X или нет? Еще одно преимущество конвенции игнорируемых на ноль, что клиентское программное обеспечение не нужно ставить так много сослагательного наклонения повсюду - "функция не поддерживается" обрабатывается как любая другая ошибка бумажника.
someone42 сейчас офлайн Пожаловаться на someone42   Ответить с цитированием Мультицитирование сообщения от someone42 Быстрый ответ на сообщение someone42



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW