Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
11 декабря 2014, 1:06:39 PM   # 1
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

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


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

  https://medium.com/@octskyward/type-safety-and-rngs-40e3ec71ab3a

Это 6 минут чтения, но Т.Л., резюме ССБ:

1) найти способы, чтобы сделать системы типа вы работаете с более сильным, либо через более эффективные инструменты и лучшие языки

2) Постарайтесь получить энтропию, как непосредственно из ядра, как это возможно, в обход пользовательского пространства ГСЧ

Я должен практиковать то, что я проповедую - bitcoinj может быть повышен для использования Checker Framework для более строгой проверки типа, и мы в настоящее время только в обход ГСЧ при пользовательском пространстве Android обнаружен. Я буду искать пути, чтобы сделать все строже и прямой в следующем году.
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн


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


11 декабря 2014, 1:46:13 PM   # 2
 
 
Сообщения: 168
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

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





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

11 декабря 2014, 9:48:09 PM   # 3
 
 
Сообщения: 378
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Вы не должны делать криптографию в JS или Java, в первую очередь. В этих языках, вы не имеете контроля об управлении памятью. Например, в JS, вы не имеете никакого контроля над тем, как и были браузер хранит ваши секретные данные (ключи и т.д.). Там нет никакого способа для обеспечения физического удаления личных данных.

Java позволяет очень специфичное для данной кучи распределения на VM OpenJDK в, что позволяет криптографические данные жить в определенном месте в памяти, не опасаясь быть скопированы нетерпеливым GC, и будут удалены из памяти перед освобождением. Нетти также имеют некоторые специфические типы буферов, которые являются нулевой копией для исполнения, которые могут быть полезны даже в не сетевых приложениях.
hexafraction сейчас офлайн Пожаловаться на hexafraction   Ответить с цитированием Мультицитирование сообщения от hexafraction Быстрый ответ на сообщение hexafraction

20 декабря 2014, 9:21:04 PM   # 4
 
 
Сообщения: 836
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

1) найти способы, чтобы сделать системы типа вы работаете с более сильным, либо через более эффективные инструменты и лучшие языки

+1

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

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

20 декабря 2014, 9:54:57 PM   # 5
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

в низком уровне
Кроме проблем, с плохим криптографической безопасности Майк говорит о только были observed-- так far-- в инструментах, написанных на Java, JavaScript, Python и в нашей экосистеме. Ни один из них не являются низкий уровень языков.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

21 декабря 2014, 10:40:15 AM   # 6
 
 
Сообщения: 836
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

в низком уровне
Кроме проблем, с плохим криптографической безопасности Майк говорит о только были observed-- так far-- в инструментах, написанных на Java, JavaScript, Python и в нашей экосистеме. Ни один из них не являются низкий уровень языков.

Вы правы в том, что я не должен использовать "низкий уровень" для но типа небезопасно, поскольку существуют небезопасные языки высокого уровня, как Javascript или Python. Java является тип безопаснее и Scala еще лучше, и это то, что сказал Майк.

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

Кстати насчет heartbleed ошибки в SSL была не в ядре Bitcoin?

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

21 декабря 2014, 8:10:06 PM   # 7
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Кстати насчет heartbleed ошибки в SSL была не в ядре Bitcoin?
Это была проблема в OpenSSL (bitcoind не предоставляет SSL для общественности по умолчанию, или даже нормальная, конфигурация, по крайней мере). Каждый другой язык также зависит от системных библиотек тоже. Таким образом, язык Bitcoin ядро ​​было написано не имеет никакого значения в этом примере.

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

До сих пор наш опыт в этом пространстве, что есть более безответственно и сломанное программное обеспечение, написанное на высокоуровневых языках, не были практически никаких проблем в этом пространстве от криптографических слабости (или даже обычной безопасности программного обеспечения) в Bitcoin приложениях, написанных на C / C ++. Я согласен, что звучит несколько парадоксально ... но это не значит, что шокирует: Безопасность этих систем зависит от мельчайших деталей поведения каждой части программного обеспечения и взаимодействия, когда ваша система скрывает детали некоторые дополнительные работы, необходимые для обзор хотя косвенность. Это несколько компенсирует рост. В криптографических (и особенно консенсус) систем это гораздо сложнее "безаварийности" и гораздо более широкий спектр непредсказуемого поведения на самом деле плохо и годный для использования. Языки, как Java, сделать некоторые виды Errored программного обеспечения "более безопасный" когда программное обеспечение incorret, но делает программное обеспечение более правильным является то, что до сих пор в значительной степени не доходя до производства промышленной разработки программного обеспечения еще (языки с зависимыми типами и средствами для формального анализа, кажется, что они _may_ приводят к более правильному программному обеспечению).  

Там нет замены для тяжелой работы и многие зрения высокоуровневых языков, как бегство от монотонного, так что может быть некоторыми смещения выбора языка от отношения авторов, что не имеет ничего общего с самим языком. В любом случае, я думаю, что ваш зубец был неуместен, по крайней мере в этой теме: Мы видели плохое поведение ГСЧА от программного обеспечения Java в несколько раз, а не только в системных библиотеках. (И не только RNG безопасности, а также такие вещи, как попытки полного кода узла быть подорвана основных криптографических библиотек бурлит нулевые исключения указателей, которые вызывают ложные блок отказов, которые бы создали вилки, если она широко используется).

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

22 декабря 2014, 8:17:05 AM   # 8
 
 
Сообщения: 836
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Кстати насчет heartbleed ошибки в SSL была не в ядре Bitcoin?
Это была проблема в OpenSSL (bitcoind не предоставляет SSL для общественности по умолчанию, или даже нормальная, конфигурация, по крайней мере). Каждый другой язык также зависит от системных библиотек тоже. Таким образом, язык Bitcoin ядро ​​было написано не имеет никакого значения в этом примере.

Эта ошибка в этой библиотеке была образцовой для потенциально катастрофических последствий слабой модели памяти, присутствующей в C и C ++. Он не ставил Bitcoin в опасности, но он, вероятно, сделал, если протокол оплаты был в ядре уже. Аргумент о том, что ошибка была в библиотеке является слабым и относится к проблеме ГСЧА мы видели с Java на Android тоже. Мы уже видели, очень похожая проблема плохо ГСЧА в Debian Linux тоже написано в C. Ошибке, как те, которые не являются конкретным языком, следствие hearbleed ошибки, однако, было. Сама ошибка не была такой Desaster был не в паре со слабой моделью памяти.

Ядро Bitcoin не может изменить свою технологию, как это, скорее всего, приведет к жесткой вилке между его старыми и новыми версиями. Мы не можем коснуться ошибок Satoshi и должны один из используемых библиотек blurp вверх или даже хранить некоторый мусор, вероятность того, что те, "функции" должны быть сохранены.

На боковой цепи, однако технология не установлена ​​в камне. Независимо от особенностей, даже ошибки другого инструмента и набор библиотек отображает есть определяет консенсус этой боковой цепи.

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

Майк дал хорошие советы по выбору новых молотков, и это я аплодировал.

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

22 декабря 2014, 3:34:17 PM   # 9
 
 
Сообщения: 1106
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

До сих пор наш опыт в этом пространстве, что есть более безответственно и сломанное программное обеспечение, написанное на высокоуровневых языках, не были практически никаких проблем в этом пространстве от криптографических слабости (или даже обычной безопасности программного обеспечения) в Bitcoin приложениях, написанных на C / C ++.

Это невероятно смелое заявление, учитывая, что почти нет-один писать Bitcoin приложений в C / C ++, за исключением самого Bitcoin Core. В равной степени демография людей, пишущих небольшое количество коды C / C ++ там очень отличается от демографической ситуации, пишущей на более современных языках.

Факт прямо сейчас мы просто не можем ничего о том, что подход лучше основан исключительно на том, где большинство ошибок было обнаружено сказать; мы можем сказать, другие отрасли промышленности последовательно удаляясь от C и в меньшей степени, C ++ из-за сложности написания безопасного кода на этих языках.

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

22 декабря 2014, 6:39:22 PM   # 10
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Я хотел бы сказать, что мы получили очень повезло в отношении Bitcoin Ядра: Satoshi был очень осторожным разработчик, который знал, что C ++ очень хорошо и максимально использовать ее возможности для повышения уровня безопасности. Разработчики, которые последовали за ним, также очень опытный, знаете C ++ очень хорошо, и знать, как избежать худших ловушек.

Основная проблема с Ядра не то, что код является небезопасным сегодня, но то, что происходит в ближайшие годы. Будут ли люди, которые следуют за Гэвина, Питер, Грегори и т.д. быть так хорошо? Как насчет альт монет? Что делать, если рефакторинга или многопоточность некоторых узким местом представляет двойную бесплатно? Во всяком случае, не так много мы можем сделать по этому поводу, кроме попытаться сделать окружающую среду как можно более безопасным. Я сделал несколько предложений о том, как это сделать в прошлом (автоматический перезапуск в случае сбоя, используйте Сет GC) и, как правило Грегори любит указать на возможные недостатки, но я не очень комфортно, опираясь на "не делать ошибок" как политика в долгосрочной перспективе.

вопросы WRT ГСЧ в Java, я не знаю ни за Android ошибки, которые были очень серьезными, но не имеют ничего общего с Java в качестве языка или платформы. Если были проблемы в Java SE я не помню, услышав о них. Игнорирование в процессе ГСЧ все еще хорошая идея, хотя.

котировка
Вы не должны делать криптографию в JS или Java, в первую очередь. В этих языках, вы не имеете контроля об управлении памятью. Например, в JS, вы не имеете никакого контроля над тем, как и были браузер хранит ваши секретные данные (ключи и т.д.). Там нет никакого способа для обеспечения физического удаления личных данных.

Это также относится и к C (например, ключи AES может сохраняться в XMM регистров в течение длительного времени после использования). Хотя hexafraction правильно, что на HotSpot можно вручную распределения кучи, это не имеет большого значения. Если злоумышленник имеет полный доступ к адресному пространству, то это так близко к "игра закончена" что вряд ли имеет какие-либо шансы есть ли несколько копий в оперативной памяти. Даже если пароль не валяются, они могут просто подождать, пока он не будет. Я не большой любитель тратить время, пытаясь "чистый" Адресные пространства паролей или ключей.

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

22 декабря 2014, 8:09:22 PM   # 11
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Я сделал несколько предложений о том, как это сделать в прошлом (автоматический перезапуск в случае сбоя, используйте Сет GC)
Наш процесс не "не делать ошибок", Bitcoin Ядро в основном использует безопасное подмножество C ++, которые структурно предотвращают некоторые виды ошибок (предполагается, что подмножество следует, что мы не имеем никакого механического исполнения). Я не верю, что кто-нибудь писать или пересмотр код для проекта будет описывать вещи основной стратегии безопасности исходящих от "не делать ошибок", А не с уровнем обзора и общего уклонения от рискованных методов.

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

Вещи как "перезапуск в случае сбоя" может быть очень опасно, потому что они позволяют злоумышленнику попытаться атаковать их снова и снова, или сохранить программное обеспечение работает (и добыча / авторинг необратимых операции) на неисправную системе. В большинстве случаев, если мы знаем, что то, что программное обеспечение не приходилось произошло только закрываются, тем лучше. Если делать это приводит к атаке DOS ... DOS атака против сети плохие, но они предпочтительнее менее извлекаемые результатов. Я думаю, что если что-нибудь, мы бы, вероятно, пойти другим путем: на "никогда не может случиться" указание коррупции, выписать "your_system_appears_busted_and_bitcoin_wont_run_until_you_test_it_and_remove_th is_file.txt" что получает проверяется на при запуске.

котировка
WRT ГСЧ проблемы в Java
Там было Bitcoin программного обеспечения Java, например, тщеславие-генератор, который генерируется предсказуемые ключами, altcoin программного обеспечение, которое не удалось различными способами, BouncyCastle вызывает несогласованность в программном обеспечении узла от броска внезапных исключения нулевого указателя на странных входах. Я не говорил, что есть какой-либо вопрос языка, но указывает на то, что даже при использовании самых узких языка вы можете найти не мешать людям писать необоснованное криптографического программного обеспечения. (И, возможно, даже сделать вещи хуже, если защита от идиотских ошибок заставляет людей забывать, что они играют с огнем.)

Вы также приравнивая две отдельные проблемы. Может оказаться, что писать Консенсус-критический код на других языках сложнее, но это совсем другая проблема, чем писать безопасный код в более общем смысле.
На самом деле нет, вы поймать момент, который я делаю, но не хватает его. Криптографические системы в целом имеют свойство, что вы жить или умереть, основываясь на косвенных деталей. Криптографическая консенсус делает дело хуже только в том, что в более широком класс сюрпризов, которые оказываются фатальная уязвимость. Это вполне возможно, и наблюдается на практике, чтобы идти в конечный итоге с эксплуатируемыми системами, поскольку некоторые заусениц / абстрагировать поведение отличается, чем вы ожидали. Типичный пример распространяется ошибки до к дальней стороне, когда аутентификация завершается неудачно, и утечка данных о сбое позволяет постепенно восстанавливаются секретные данные. Другие примеры, что неявное поведение набивки утечки информации о ключах (есть пример этого в ядре Bitcoin:. Симметричные криптографические процедуры OpenSSL имели неявное поведение обивки, которые делают бумажник шифрование быстрее взломать, чем было предназначено)

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

22 декабря 2014, 11:08:36 PM   # 12
 
 
Сообщения: 1988
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

В равной степени демография людей, пишущих небольшое количество коды C / C ++ там очень отличается от демографической ситуации, пишущей на более современных языках.
Может быть, это правда, где вы живете. Где я живу C ++ имеет возрождение в виде языка SystemC надстройки / подмножестве, где некоторые вещи о программах могут быть доказана.

Кроме того, gmaxwell размещена здесь информация о новых исследованиях, где конкретное подмножество C (нацеливание специфической архитектуры TinyRAM) может быть использованы для производства машин проверяемых доказательств. AFAIK это еще вариант долго выстрел для Bitcoin, а не что-то использовать в настоящее время.

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

23 декабря 2014, 10:36:11 PM   # 13
 
 
Сообщения: 836
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Так что я, конечно, не соглашаясь с этими точками; но я не согласен с волшебной пули мышления, которая доказуемо не соответствует действительности: Запись в FooLang будет абсолютно не сделать ваши программы безопасны для людей, чтобы использовать. Это _may_ быть полезным, на самом деле, но это не является ни необходимым, ни достаточным, как показано с помощью программного обеспечения, размещенного в этой области.

Ни Майк, ни я не рекламировался языком как волшебная пуля, которая делает программы безопасной.

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

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

24 декабря 2014, 1:50:07 AM   # 14
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Так что я, конечно, не соглашаясь с этими точками; но я не согласен с волшебной пули мышления, которая доказуемо не соответствует действительности: Запись в FooLang будет абсолютно не сделать ваши программы безопасны для людей, чтобы использовать. Это _may_ быть полезным, на самом деле, но это не является ни необходимым, ни достаточным, как показано с помощью программного обеспечения, размещенного в этой области.

Ни Майк, ни я не рекламировался языком как волшебная пуля, которая делает программы безопасной.

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

Я бы сказал, что вы играете в более опасную игру, чем у нас.

Вы написали, "Большинство эксплоитов возникают из-за ошибки программирования в низком уровне слабо типизированных языках", Я указал, что в нашем пространстве мы наблюдали обратное: Там были более серьезные криптографические недостатки программного обеспечения, написанного на очень языках высокого уровня, таких как Python, JavaScript, PHP, Java. и т.д. Вот и все. Пожалуйста, приглушить личные оскорбления. Вы очень близки к заработав игнорировать нажатие кнопки от меня. Я тщательно избегать вашего skills-- смешивает с грязью или даже о том, что я думаю, что ваши предпочтительные инструменты не _good_, только что, что люди, использующие их страдать ошибки too--, но в каждом ответе вы делаете вы атакуете мою компетенцию.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

24 декабря 2014, 2:31:14 AM   # 15
 
 
Сообщения: 539
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

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

Динамически типизированные языки хуже, потому что вы не можете полностью понять последствия функции, не глядя на каждом вызове несуществующей функции, чтобы увидеть, какие типы аргументов (а иногда вы не можете вывести тех, кто не углубляясь в дереве вызовов!)

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

Я предпочел бы, чтобы низко-рычаг криптографического кода (управление ключами, ПСЧ, подпись, шифрование, аутентификация) записывается в C / C ++ (например, secp256k1 библиотека ГАРО в Bitcoin) и каждый слой записывается в более современном статическом языке типизированной, такой в Java. Для большинства проектов, что, вероятно, означает, что 90% кода будет в Java и 10% будет в C / C ++ (и это, вероятно, будет криптографический код библиотеки)
Код Java 90% будет больше не является безопасным, потому что Java-код является более безопасным, сам по себе, а потому, что это было бы легче провести аудит. 10% будет сложнее, но так как это было бы мало, вы смогли бы удвоить время аудита для этой части.
 
В конце концов, вы получите более надежную систему, использовав ту же аудиторскую или рецензирования время.
Sergio_Demian_Lerner сейчас офлайн Пожаловаться на Sergio_Demian_Lerner   Ответить с цитированием Мультицитирование сообщения от Sergio_Demian_Lerner Быстрый ответ на сообщение Sergio_Demian_Lerner

24 декабря 2014, 3:04:17 AM   # 16
 
 
Сообщения: 1988
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Я предпочел бы, чтобы низко-рычаг криптографического кода (управление ключами, ПСЧ, подпись, шифрование, аутентификация) записывается в C / C ++ (например, secp256k1 библиотека ГАРО в Bitcoin) и каждый слой записывается в более современном статическом языке типизированной, такой в Java.
Я не согласен, что такое сочетание будет безопаснее и легче аудит. Java и среды выполнения C ++ очень трудно правильно взаимодействовать, особенно в обработке исключений и нарезание резьб аспекты. Таким образом, предполагаемый аудит не только включать в себя аудит кода ядра Bitcoin, но и аудит большую часть времени выполнения Java.

Можно было бы сделать один или два ограничения в смешанной архитектуры вы предлагающей:

1) C / C ++ код только "листья" на дереве вызовов, то есть только Java вызовы C ++, C ++ не требует Java.

2) "Ява" понимается не означает, "подтверждено стандартом конформным Java" но "подмножество Java поддерживается GCJ вперед-в-время компиляции" соответствие с GCC / G ++ используется для кода C / C ++.

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

Редактировать:

Историческая справка: если "Ява" будет означать "Microsoft Visual J ++" с J / Direct вместо JNI в качестве межъязыкового слоя, который мог бы также работать относительно гладко. Эти вещи имеют исторический интерес, хотя есть по крайней мере один поставщик в России, по-прежнему поддерживает набор инструментов Java, который неофициально совместит с историческим кодом: http://www.excelsior-usa.com/ .
2112 сейчас офлайн Пожаловаться на 2112   Ответить с цитированием Мультицитирование Сообщения от 2112 Быстрый ответ на сообщение 2112

24 декабря 2014, 5:27:18 AM   # 17
 
 
Сообщения: 836
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Так что я, конечно, не соглашаясь с этими точками; но я не согласен с волшебной пули мышления, которая доказуемо не соответствует действительности: Запись в FooLang будет абсолютно не сделать ваши программы безопасны для людей, чтобы использовать. Это _may_ быть полезным, на самом деле, но это не является ни необходимым, ни достаточным, как показано с помощью программного обеспечения, размещенного в этой области.

Ни Майк, ни я не рекламировался языком как волшебная пуля, которая делает программы безопасной.

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

Я бы сказал, что вы играете в более опасную игру, чем у нас.

Вы написали, "Большинство эксплоитов возникают из-за ошибки программирования в низком уровне слабо типизированных языках", Я указал, что в нашем пространстве мы наблюдали обратное: Там были более серьезные криптографические недостатки программного обеспечения, написанного на очень языках высокого уровня, таких как Python, JavaScript, PHP, Java. и т.д. Вот и все. Пожалуйста, приглушить личные оскорбления. Вы очень близки к заработав игнорировать нажатие кнопки от меня. Я тщательно избегать вашего skills-- смешивает с грязью или даже о том, что я думаю, что ваши предпочтительные инструменты не _good_, только что, что люди, использующие их страдать ошибки too--, но в каждом ответе вы делаете вы атакуете мою компетенцию.

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

Модель, которая была успешным с ядром Bitcoin, однако не смогла так много раз, что он заполняет библиотеки с DOS и Dont в указателях арифметики, анатомия переполнения буфера и нулевой строка с разделителями подвигов. Я знаю, разработчик ядра Bitcoin тщательно избегать этих источников, она до сих пор не защищает от ошибки в OpenSSL. Это ошибка не была криптографической в ​​природе, но подвергая память процесса как следствие отсутствия границ массива проверить в / C ++ времени выполнения C. Конечно, есть аргументы для не имеющих эти проверок во время выполнения программы, но эти аргументы особенно хорошо работают с языками, которые проверяют более во время компиляции, например, что нарушения во время выполнения менее вероятны.

В то время как исключительный уход может быть успешным, так как мы видим, что трудно масштабировать и поддерживать. Именно поэтому индустрия программного обеспечения была отходя от C / C ++. Он сохранил актуальность в некоторых областях, как любая хорошая технология.

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









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

24 декабря 2014, 7:37:19 AM   # 18
 
 
Сообщения: 1106
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

На самом деле нет, вы поймать момент, который я делаю, но не хватает его. Криптографические системы в целом имеют свойство, что вы жить или умереть, основываясь на косвенных деталей. Криптографическая консенсус делает дело хуже только в том, что в более широком класс сюрпризов, которые оказываются фатальная уязвимость. Это вполне возможно, и наблюдается на практике, чтобы идти в конечный итоге с эксплуатируемыми системами, поскольку некоторые заусениц / абстрагировать поведение отличается, чем вы ожидали. Типичный пример распространяется ошибки до к дальней стороне, когда аутентификация завершается неудачно, и утечка данных о сбое позволяет постепенно восстанавливаются секретные данные. Другие примеры, что неявное поведение набивки утечки информации о ключах (есть пример этого в ядре Bitcoin:. Симметричные криптографические процедуры OpenSSL имели неявное поведение обивки, которые делают бумажник шифрование быстрее взломать, чем было предназначено)

Я в основном озабочен ли не с помощью C (++) с ручным управлением памятью является приемлемой практикой. Щуря ручное управление памятью подвергает вас к царю всех неявных деталей: что мусор случается в памяти в тот самый момент.

Учитывая, что у нас есть по крайней мере, C ++ доступны, которые могут оградить вас от ручного управления памятью (1), там просто нет оправдания, чтобы писать код, путь больше по умолчанию. Одинаково писать C ++ таким образом, что выставляет вас к этому классу ошибок, как правило, неприемлемо.

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

1) Где ручное управление памятью == вещи, которые могут привести к повреждению памяти и недействительные доступы. Есть, конечно, другие значения термина, относящиеся к практике, когда память еще "удалось" вручную на определенном уровне, например, распределение, но коррупция и недействительные доступы не представляется возможным.

Я, конечно, фанат умных инструментов, которые делают программное обеспечение более безопасным (я концептуально большой поклонник Руст, например). Но что я вижу развертывается в более широком мире является то, что более актуально развернуто слабое программное обеспечение криптография в результате причин, не имеющих отношения к языку. Это не обязательно означает, что ничего о не-криптографического программного обеспечения. И некоторые из них, вероятно, просто отношение корреляции; вы не получите далеко в C, если вы не готовы обращать внимание на детали. Таким образом, мы можем ожидать, что другие языков, чтобы быть более плотными в небрежных подходах. Но это не означает, что кто-то одинаково внимательны не могли бы сделать лучше, в общем, в чем-то с лучшими свойствами. (Я предполагаю, что это в основном ваша демографическая корреляция). Так что я, конечно, не соглашаясь с этими точками; но я не согласен с волшебной пули мышления, которая доказуемо не соответствует действительности: Запись в FooLang будет абсолютно не сделать ваши программы безопасны для людей, чтобы использовать. Это _may_ быть полезным, на самом деле, но это не является ни необходимым, ни достаточным, как показано с помощью программного обеспечения, размещенного в этой области.

И с тех пор, когда я говорил что-нибудь о "волшебные пули"? Я говорю о приемлемой босой минимальной практике. Снова и снова мы видим, что делать ручное управление памятью требует титанических усилий, чтобы получить права, но люди делать получить достаточно далеко в C (++), чтобы вызвать серьезные проблемы, делая это.

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

Точно так же, как многие компьютерные науки выпускников закончить свое образование с хорошим пониманием того, что язык программирование принципиально интерфейс пользователя слой между ними и машинным кодом?
Peter Todd сейчас офлайн Пожаловаться на Питер Тодд   Ответить с цитированием Мультицитирование сообщения от Peter Todd Быстрый ответ на сообщение Peter Todd

24 декабря 2014, 7:46:35 AM   # 19
 
 
Сообщения: 1106
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

В равной степени демография людей, пишущих небольшое количество коды C / C ++ там очень отличается от демографической ситуации, пишущей на более современных языках.
Может быть, это правда, где вы живете. Где я живу C ++ имеет возрождение в виде языка SystemC надстройки / подмножестве, где некоторые вещи о программах могут быть доказана.

Я специально со ссылкой на демографию людей, пишущих код для Bitcoin связанных приложений.

Кроме того, gmaxwell размещена здесь информация о новых исследованиях, где конкретное подмножество C (нацеливание специфической архитектуры TinyRAM) может быть использованы для производства машин проверяемых доказательств. AFAIK это еще вариант долго выстрел для Bitcoin, а не что-то использовать в настоящее время.

Мой комментарий здесь относится к Консенсус-критический код в дихотомии вы упомянули позже.

С автоматами проверяемых доказательств не имеет ничего общего с типом программирования C Я критикующего; ни делает SystemC. Эти типы сред настолько далеки от ванили и программирования небезопасным C (++), что заставляет людей в беде, что вы могли бы также назвать их на разных языках во всем, кроме имени.
Peter Todd сейчас офлайн Пожаловаться на Питер Тодд   Ответить с цитированием Мультицитирование сообщения от Peter Todd Быстрый ответ на сообщение Peter Todd

24 декабря 2014, 7:57:58 AM   # 20
 
 
Сообщения: 1106
Цитировать по имени
цитировать ответ
по умолчанию Re: Мысли о безопасности типа и криптографических ГСЧ

Динамически типизированные языки хуже, потому что вы не можете полностью понять последствия функции, не глядя на каждом вызове несуществующей функции, чтобы увидеть, какие типы аргументов (а иногда вы не можете вывести тех, кто не углубляясь в дереве вызовов!)

Вы можете быть заинтересованы, чтобы узнать, что Python на самом деле движется в направлении статических типов; язык недавно была добавлена ​​поддержка для определения типов аргументов функции в синтаксисе. Как типы фактически проверяется не определено в самом языке - вы можете использовать сторонние модули ввести желаемые правила. IIRC следующей версия, 3,6 (?) Будет в том числе модуля с одним из подходов к фактически соблюдению этих типов аргументов как часть стандартной библиотеки. Точно так же атрибуты класса имеет поддержку синтаксиса для определения типов, и снова вы уже можете использовать сторонние модули для обеспечения соблюдения этих правил.

Я не удивлюсь, если "сладкое пятно" для большинства задач является языком так же, как Python с возможностью указать информацию о типе, а также возможность легко соблюдения использования этой техники в важном коде 100%, в том же время предоставляя программистам возможность писать быстро н грязные нетипизированный код где желательно. И, конечно же, с немного информации о типе написания компиляторов, которые производят достаточно быстрый код становится довольно легко - Cython делает это уже на Python без лишней суеты.
Peter Todd сейчас офлайн Пожаловаться на Питер Тодд   Ответить с цитированием Мультицитирование сообщения от Peter Todd Быстрый ответ на сообщение Peter Todd



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW