You are here

Подписване на пакети в Debian и Fedora

Зададох някои въпроси в списъка debian-security и отговорите на Michael Stone може да са интересни на някои. ("he" в моите въпроси е лесно разпознаваем ;-)

He said that after signed Fedora package is installed (by default, only signed packages are installed), you can boot from some CD and then check signatures of each file of each package. Thus, only having key Red Hat's fingerprint, you can check your all installed packages.
What I'm asking is if this is possible with dpkg-sig? If not, I think it's desirable feature.

No it's not. The redhat approach misses the boat on what is probably the
largest part of your installation -- your data & configuration files. Use
something like aide or tripwire to validate your installation.

Another thing he doesn't like is that check is based on signed MD5 hash of content instead of based on signed content. Is it true that signed MD5 is weaker than signed content?

No.

Tags: 

Comments

В пост номер 4 съм представил набързо вътрешностите на един .deb пакет подписан с dpkg-sig. Това (_gpg*) са embed-натите сигнатури в пакетите. dpkg-sig е програмиран главно от Андреас Барт и Апликейшън менажера на Оги Кулев ;-). От друга страна подписването на групи от дебиан архива е targeted от apt-secure, импленентнат главно от Колин Уолтърс (Debian Developer, който работи за Red Hat, т.е. последните му плащат заплатата), Исак Джоунс (не ми е известен много) и Мат Цимерман (последния май има нещо общо за Филип Цимерман и работи за компанията която се е заела с Ununtu). Тези работи не са предложени и измислени от днес за утре, това е започнало още около Potato, (бистрено е до посиняване в пощ. списъци с години) чиито архив за пръв път се появяват подписи върху Release файловете.

Да, да бъдат поставени сигнатурите в пакета е най-чистото решение. Така те ходят винаги с пакета и не може да ги няма. Освен това се избягва това едновременно подписване на всички суми на пакети (когато имаме един централен файл), за което говорих по-горе. Така обезмисляш колизията - дори тя да бъде намерена, ще е намерена само за един пакет. Докато ако бъде намерена за файла в всички MD5 и SHA-1 суми... става много много лошо.

Весо, а ако просто имаш и двете контролни суми във файла, и подпишеш само него?
Иначе си прав, че могат да вкарат сигнатурата директно в Packages, да видим кога ще им дойде желание:)

п.с. Същия почти разговор имахме и с Жоро Гунински, ще го насоча насам.

В _gpgbuilder* задължително са md5, sha1, size, name на member-ите плюс друга (административна) информация, като роля... Всичко това се подписва и inlined и detached едновременно в _gpgbuilder, _gpgbuilder0...

Накратко нещата стоят така. Ако правиш хеш по два алгоритъма на един блок информация, то вероятността да се намери смислена колизия, която да дублира блока и това да става и по двата алгоритъма е на практика нула. В RPM се използват и двата алгоритъма едновременно и това е от много много време насам. Още в дискусиите при създаването на системата са отчетени мненията на много специалисти по криптоанализ.

Нещо друго.

Ако имаме файл със съдържание от типа:

...
"md5sum file_name_1)" "file_name_1"
"md5sum file_name_2)" "file_name_2"
"md5sum file_name_3)" "file_name_3"
...

и файла е подписан (дефакто това означава да се изчисли MD5 или SHA-1 сума на файла и тя да се кодира с частния ключ за да е декодируема с публичния), това е по-слаба защита отколкото ако всяка сума във файла бъде подписана поотделно. Това исках да кажа и с първото ми писание. Реално погледнато подобен процес е еквивалентен като замисъл при използването на итерации в MAC.

Накратко, ако имаш във подписания файл MD5 и SHA-1, това разказва играта на възможната атака?

п.с. вероятността за смислена колизия не е ли достатъчно малка, поне при sha1?

Първо въпроса на Оги е малко неправилен. Макар смислово да е ясен след малко размисъл.

Първият отговор показва, че човека не е пипал RPM базирана система. Но той не е фрапиращ.

Дълго мислих дали вторият отговор е истина или не ...

Понеже да даваш отговор "да" или "не" на такъв фундаментален въпрос е признак на незнание, аз ще дам доста по-подробен и обширен отговор.

Целият въпрос се свежда до следната формулировка "кое е по-сигурно, да подпишеш купчина файлове, или да подпишеш всеки файл по отделно". За да се отговори на този въпрос, трябва да се надникне малко или повече в основите на криптографията и метода на хеширащите функции. Това, от което се пазим е колизия (смислена). Тя може да компрометира една хеш сума. Пита се - кое е по-сигурно: да подпишем един голям блок информация или да го подпишем на части? Е истина е, че подписаният на части блок е по-труден за колидиране. Тази схема може да се пренесе и на купчина файлове. Трябва да се търсят много колизии, а не една. И за това в един пакет, всеки файл трябва да има подпис - вярно, това е малко тежка за проверка, но прави наличието на колизи почти невероятно.

Представете си следния реален случай: имате файл с MD5 суми на файлове. Сумите вътре не са подписани, а е подписан само файла с тези суми. Да се върнем на колизиите. И теоретично и практически е ясно, че е достатъчна колизия на хеша на файла. Намерим ли я, можем да модифицираме съдържанието. Тогава е все едно, че имаме хеш суми в самия файл. Нещата стават толкова по-опасни, колкот повече информация има вътре. С една колизия можеш да удариш всичко. Да не говорим, че MD5 хеширащата функция тепърва ще бъде "удряна". За това в някои умни пакетни системи (нямащи претенции да бъдат менажирани от велики екипи:) с обширни познания в криптографията), хората подписват с MD5 и успоредно с това и със SHA-1, защото ясно са осъзнали важността на тези неща... при това много отдавна и следвайки съветите на криптоаналитиците.

User login