Потому что механизмы SGX как раз и предусматривают аппаратную защиту от таких действий: (я давно читал, поэтому могу слегка обманывать, лучше уточнить в оригинальной документации интел) код загружается в специальный домен, защищённый от всех, включая гипервизоры и аналогичные программы в соседних доменах, причём туда можно загрузить не любой код, а только от лицензированных партнёров (скорее всего подписанный зашитым в CPU ключом), этот код может получить слепок окружения и отправить на удалённую сторону.
Ни к коду, ни к стеку, ни к данным из других программ получить доступ нельзя (на самом деле есть дыры, но это детали конкретных реализаций, которые исследовали, в принципе, довольно суровая защита).
Соответственно удалённая сторона может определить, что у пользователя нужная ОС, что она не пропатчена, версии биоса, что загруженная программа совпадает с эталонной, что в памяти нет инжектированного кода и т. п.
Шифрование памяти один из основных предусловий для Intel SGX — технологии, которая предназначена для безопасного от пользователя выполнения удалённого кода на компьютере пользователя.
Основная выгода в том, что эффекты явно прописываются в типах.
С этой информацией контроль правильности использования эффектов можно выполнить ещё на этапе компиляции. Т. е., например, компилятор проконтролирует, что используемым эффектам есть их реализации.
Явная реализация эффектов также позволяет программисту их прозрачно контролировать: время, способ и результаты выполнения, так как принципиально нет возможности ввести неотслеживаемый эффект.
Также возникает возможность для реализации других методов статического анализа исходного кода на предмет соответствия каким-либо правилам.
C# родился благодаря COM Object Runtime — попытки Microsoft устранить неустранимые недостатки COM, связанные с утечками объектов и неуправляемым доступом к памяти.
Поэтому инженеры пришли к мысли о необходимости единой/общей управляемой среды выполнения, из которой родился CLR. Взаимодействие с COM в CLR присутствует изначально как один из фундаментальных принципов.
На этот момент были проблемы с использованием для этого Java, поэтому и приняли решение делать свой язык для решения своих проблем.
Я больше недели искал дефект в ядре, который появился из-за того, что происходил доступ за выделенный буфер. Проявлялась она очень редко, при опросе ARP-записей, причём никакого отношения к этой подсистеме дефект не имел.
Память в неуправляемых языках — это глобальный ресурс, поэтому это осложняет поиск, так как необходимо быть готовым рассматривать весь код, включая бинарные блобы.
мы начинаем подключать его через TCP/IP — и (почему-то!) не замечаем
Не замечаем, пока не протечёт абстракция, а после того начинается тюнинг параметров, отключение алгоритма Нагла, переписывание с TCP на UDP с собственным контролем перегрузки и противодействия потерь.
А с распределёнными системами ещё и возникает скрытое состояние в виде сообщений-в-транзите, которое человеку осознать довольно тяжело.
Ну, если простой способ с обращением к базе знания, накопленного за много лет, не подошёл, придётся пойти сложным способом — придумать краткий способ описания самому.
Frequency division multiple access (FDMA), code division multiple access (CDMA), or a combination of the two (FDMA/CDMA) can be used to achieve simultaneous communications in RF/wireless interconnects. In an FDMA interconnect, frequency bands of I/O channels can be allocated between 5–105 GHz with a bandwidth of approximately 5–20 GHz in each channel and sustaining a minimum data rate of 5–40 Gb/s depending on the modulation scheme.
После чтения всех споров пришлось всё-таки просмотреть презентацию.
Мне кажется, что красным выделялся пункт, на который в данный момент докладчик обращал внимание слушателей. Следующий слайд про эксплуатационные характеристики нелинейного преобразования также наталкивает на мысль, что выбран был вариант с аналитической структурой, так как для случайного преобразования будет сложно минимизировать число операций для реализации подстановки.
Насколько мне известно, по паузам работает только 10 мегабитный Ethernet, а последующие уже используют специальные контрольные символы.
> Не понятно только, почему в одном случае это делегировали на уровень выше, а в другом — сами решили разбираться.
Так вся статья про это — полустихийное формирование условий, которые потом просто увековечили в стандартах.
В 100Мб Ethernet'е символы можно посмотреть здесь: JK — старт, TR — конец.
Если брать формат LLC, то дополнение на поле размера не влияет, если Ethernet II, то если необходимо передавать информацию о размере данных, это обязанность вышележащего протокола.
На уровне кодирования Ethernet есть символы начала и конца кадра.
Заполнять кадр до 64 байт требуется от источника, т. е. если ниже это просто нестандартно и может быть не принято на стандартном оборудовании.
Некоторые устройства умеют принимать такие кадры.
Ни к коду, ни к стеку, ни к данным из других программ получить доступ нельзя (на самом деле есть дыры, но это детали конкретных реализаций, которые исследовали, в принципе, довольно суровая защита).
Соответственно удалённая сторона может определить, что у пользователя нужная ОС, что она не пропатчена, версии биоса, что загруженная программа совпадает с эталонной, что в памяти нет инжектированного кода и т. п.
Давай посмотрим на fossil, что там сделано своего:
Понятно, что это всё дало основу для самодостаточности fossil'а, но велосипедом, пусть и очень хорошим, он от этого быть не перестал.
Пусть и самый лучший.
Потому что когда Хипп обнаружил, что его не устраивают существующие СКВ, он не приспособился, а сделал систему под себя и свои проекты.
С этой информацией контроль правильности использования эффектов можно выполнить ещё на этапе компиляции. Т. е., например, компилятор проконтролирует, что используемым эффектам есть их реализации.
Явная реализация эффектов также позволяет программисту их прозрачно контролировать: время, способ и результаты выполнения, так как принципиально нет возможности ввести неотслеживаемый эффект.
Также возникает возможность для реализации других методов статического анализа исходного кода на предмет соответствия каким-либо правилам.
Поэтому инженеры пришли к мысли о необходимости единой/общей управляемой среды выполнения, из которой родился CLR. Взаимодействие с COM в CLR присутствует изначально как один из фундаментальных принципов.
На этот момент были проблемы с использованием для этого Java, поэтому и приняли решение делать свой язык для решения своих проблем.
Память в неуправляемых языках — это глобальный ресурс, поэтому это осложняет поиск, так как необходимо быть готовым рассматривать весь код, включая бинарные блобы.
Не замечаем, пока не протечёт абстракция, а после того начинается тюнинг параметров, отключение алгоритма Нагла, переписывание с TCP на UDP с собственным контролем перегрузки и противодействия потерь.
А с распределёнными системами ещё и возникает скрытое состояние в виде сообщений-в-транзите, которое человеку осознать довольно тяжело.
Мне кажется, что красным выделялся пункт, на который в данный момент докладчик обращал внимание слушателей. Следующий слайд про эксплуатационные характеристики нелинейного преобразования также наталкивает на мысль, что выбран был вариант с аналитической структурой, так как для случайного преобразования будет сложно минимизировать число операций для реализации подстановки.
> Не понятно только, почему в одном случае это делегировали на уровень выше, а в другом — сами решили разбираться.
Так вся статья про это — полустихийное формирование условий, которые потом просто увековечили в стандартах.
Если брать формат LLC, то дополнение на поле размера не влияет, если Ethernet II, то если необходимо передавать информацию о размере данных, это обязанность вышележащего протокола.
Заполнять кадр до 64 байт требуется от источника, т. е. если ниже это просто нестандартно и может быть не принято на стандартном оборудовании.
Некоторые устройства умеют принимать такие кадры.