Да, написал вам - больше комментаторов тут нету ) Зафиксировал правку отдельным комментарием, не сообразил про уведомление. Согласен, параметрический тест тут в точку
Про типы согласен. Для padding и cipher suite “parse, don’t validate” работает. AllowedSigAlg вместо строки, плохих вариантов нет на входе. Ваш mycrypto.py ровно это делает, и для Python это хороший паттерн.
Но вы сами написали где типы заканчиваются: качество RNG, revocation, nonce после рестарта. Вот тут контракты и живут. DRBG.seeded == true, reseed_counter < max_requests, entropy прошла health check. Это не тип, это runtime-инвариант. Его надо зафиксировать явно, иначе он только в голове.
Про тест. Да, в статье упрощённый пример. В репо sign_data использует PKCS1v15 для RSA, можно глянуть crypto_engine.py. X.509 экосистема пока на PKCS1v15, PSS для сертификатов поддерживается, но на практике ломает совместимость. В статье контракт описывает как должно быть, в репо пока компромисс с экосистемой. Надо было написать это явно в статье. Поправлю в репо.
В целом “make illegal states impossible” и DbC не конкурируют. Первое про форму данных на входе, второе про поведение на стыках. Оба нужны.
Сталкивался с таким. модель вызвала tool которого не было в whitelist.. Но он существовал в runtime. По сути это confused deputy problem из классической ИБ. Решение явный allowlist на уровне middleware до исполнения а не в промпте
Интересная техника. Но есть нюанс: callback injection через EnumWindows/EnumChildWindows работает только пока Defender не обновит сигнатуры на конкретный callback-вектор. Microsoft обычно закрывает такие штуки за 2-3 недели после публичного disclosure. Вопрос: вы тестировали на актуальных базах Defender (апрель 2026)? Потому что половина подобных техник из 2024-2025 уже не проходит
В статье не хватает одного момента. Firewall на входе/выходе ловит то что можно классифицировать по паттерну. Но indirect prompt injection через данные? Скрытый текст в PDF который модель читает cовсем другой вектор. firewall на уровне промпта его не поймает. Нужна санитизация данных до попадания в контекст. Meta выпустила LlamaFirewall там есть отдельный модуль этого
Крутая история. “Компилятор в голове” - точное название.
У меня первый код был на Бейсике, в тетрадке. Потом 10 лет в геймдеве - там тоже часто рисовал архитектуру на бумаге, прежде чем открыть IDE. Сейчас embedded: прошивки для микроконтроллеров, Linux на ARM-платах, паяльник на столе рядом с клавиатурой.
И знаешь что забавно - принцип “записал на бумажке, чтобы не забыть” никуда не делся. Только теперь я записываю не теги, а архитектурные решения в markdown-файлы, потому что AI-агент между сессиями всё забывает. По сути тот же бумажный бэкап, только для нейросети.
Твой листок в клетку - это и есть настоящий фундамент. Инструменты приходят и уходят, а привычка думать до того как писать - остаётся. Держи темп.
Информация
В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Зарегистрирован
Активность
Специализация
Фулстек разработчик, Архитектор программного обеспечения
Да, написал вам - больше комментаторов тут нету ) Зафиксировал правку отдельным комментарием, не сообразил про уведомление. Согласен, параметрический тест тут в точку
UPD: поправил — sign_data теперь RSA-PSS, тест в статье обновлён. Спасибо за замечание про PKCS1v15-подпись в тесте
Про типы согласен. Для padding и cipher suite “parse, don’t validate” работает. AllowedSigAlg вместо строки, плохих вариантов нет на входе. Ваш mycrypto.py ровно это делает, и для Python это хороший паттерн.
Но вы сами написали где типы заканчиваются: качество RNG, revocation, nonce после рестарта. Вот тут контракты и живут. DRBG.seeded == true, reseed_counter < max_requests, entropy прошла health check. Это не тип, это runtime-инвариант. Его надо зафиксировать явно, иначе он только в голове.
Про тест. Да, в статье упрощённый пример. В репо sign_data использует PKCS1v15 для RSA, можно глянуть crypto_engine.py. X.509 экосистема пока на PKCS1v15, PSS для сертификатов поддерживается, но на практике ломает совместимость. В статье контракт описывает как должно быть, в репо пока компромисс с экосистемой. Надо было написать это явно в статье. Поправлю в репо.
В целом “make illegal states impossible” и DbC не конкурируют. Первое про форму данных на входе, второе про поведение на стыках. Оба нужны.
Сталкивался с таким. модель вызвала tool которого не было в whitelist.. Но он существовал в runtime. По сути это confused deputy problem из классической ИБ. Решение явный allowlist на уровне middleware до исполнения а не в промпте
Интересная техника. Но есть нюанс: callback injection через EnumWindows/EnumChildWindows работает только пока Defender не обновит сигнатуры на конкретный callback-вектор. Microsoft обычно закрывает такие штуки за 2-3 недели после публичного disclosure. Вопрос: вы тестировали на актуальных базах Defender (апрель 2026)? Потому что половина подобных техник из 2024-2025 уже не проходит
В статье не хватает одного момента. Firewall на входе/выходе ловит то что можно классифицировать по паттерну. Но indirect prompt injection через данные? Скрытый текст в PDF который модель читает cовсем другой вектор. firewall на уровне промпта его не поймает. Нужна санитизация данных до попадания в контекст. Meta выпустила LlamaFirewall там есть отдельный модуль этого
Крутая история. “Компилятор в голове” - точное название.
У меня первый код был на Бейсике, в тетрадке. Потом 10 лет в геймдеве - там тоже часто рисовал архитектуру на бумаге, прежде чем открыть IDE. Сейчас embedded: прошивки для микроконтроллеров, Linux на ARM-платах, паяльник на столе рядом с клавиатурой.
И знаешь что забавно - принцип “записал на бумажке, чтобы не забыть” никуда не делся. Только теперь я записываю не теги, а архитектурные решения в markdown-файлы, потому что AI-агент между сессиями всё забывает. По сути тот же бумажный бэкап, только для нейросети.
Твой листок в клетку - это и есть настоящий фундамент. Инструменты приходят и уходят, а привычка думать до того как писать - остаётся. Держи темп.