DES - один из наиболее популярных шифровальных алгоритмов, разработан компанией IBM и Правительством США в 1977 г. для защиты коммерческой информации. Таким образом, DES - поддержанный на государственном уровне симметричный алгоритм.
Алгоритм DES использует случайный 56-битовый ключ шифрования, это означает 256= 72 057 594 037 927 936 возможных ключей1, приблизительно 7,2*1017 значений. Размер блока шифрования 64 бит. Открытый текст разбивается на блоки по 64 бит и подается на вход DES, в результате чего получается шифртекст. Алгоритм DES имеет 4 режима работы. Один из них Cipher Block Chaining (CBC).
CBC - это режим шифрования с обратной связью, при котором перед вычислением очередного шифрованного блока открытый текст складывается побитно по модулю 2 с предыдущим шифртекстом. В режиме СВС над открытым текстом и предыдущим шифртекстом выполняется операция XOR и тем самым каждый предыдущий шифрблок используется для модифицирования очередного блока открытого текста.
Если без обратной связи шифрование DES производится так:
Блок 1 | Блок 2 | Блок 3 | Блок 4 |
| | | |
Шифртекст 1 | Шифртекст 2 | Шифртекст 3 | Шифртекст 4 |
где ↓ означает шифрование DES, то в режиме СВС так:
Блок 1 | Блок 2 | Блок 3 | Блок 4 |
| | | |
Шифртекст 1 | Шифртекст 2 | Шифртекст 3 | Шифртекст 4 |
где
означает операцию XOR (побитовое сложение без переноса).
В режиме шифрования без обратной связи все одинаковые исходные открытые тексты будут зашифрованы одинаково, что дает возможность противнику угадать открытый текст, даже не прибегая к его расшифровыванию, а просто накапливая шифрблоки и соответствующие им открытые тексты. Сцепление добавляет в блочный шифр механизм обратной связи, и, таким образом, результат шифрования этого блока зависит не только от его значения и значения ключа, но и от предыдущих блоков этого сообщения. При шифровании в режиме СВС одинаковые блоки открытого текста превращаются в различающиеся друг от друга блоки шифртекста только в том случае, если различались предшествующие блоки. Однако два одинаково начинающихся сообщения будут зашифрованы одинаково.
Для того чтобы два одинаковых сообщения после шифрования выглядели по-разному, вводится понятие вектора инициализации, или по-криптографически - синхропосылка. Это и есть та самая «соль», которая делает хеши сообщений непохожими друг на друга:
Синхропосылка | Блок 1 | Блок 2 | Блок 3 | Блок 4 |
| | | | |
Шифртекст 0 | Шифртекст 1 | Шифртекст 2 | Шифртекст 3 | Шифртекст 4 |
DES - достаточно старый алгоритм. Его основные недостатки - это малая длина ключа и малая длина блока. Малая длина ключа позволяет сейчас осуществить полный перебор ключей за относительно небольшое время (несколько часов, максимум несколько дней). Малая длина блока делает этот шифр уязвимым к коллизиям.
На сегодняшний день общепризнанно минимальной длиной ключа для симметричных алгоритмов является 128 бит, а размер блока 256 бит. (На этот счет имеются работы автора данной статьи [журнал Конфидент 3/98, 6/98] и в Интернете)
Стойкость несимметричных алгоритмов используемых в Oracle (RSA, Diffie-Hellman) основывается на задаче факторизации больших чисел, поэтому минимальная граница для них совершенно другая - 2048 бит, а лучше 4096.
Скрипт who_can_access.sql Питера Финигана (Pete Finnigan), позволяющий найти пользователей, имеющих доступ к этим объектам. Получен отсюда.
who_can_access: Release 1.0.3.0.0 - Production on Thu Apr 20 12:53:15 2006
Copyright (c) 2004 PeteFinnigan.com Limited. All rights reserved.
NAME OF OBJECT TO CHECK [USER_OBJECTS]: dba_users
OWNER OF THE OBJECT TO CHECK [USER]: sys
OUTPUT METHOD Screen/File [S]:
FILE NAME FOR OUTPUT [priv.lst]:
OUTPUT DIRECTORY [DIRECTORY or file (/tmp)]:
EXCLUDE CERTAIN USERS [N]:
USER TO SKIP [TEST%]:
Checking object => SYS.DBA_USERS
====================================================================
Object type is => VIEW (TAB)
Privilege => SELECT is granted to =>
User => CTXSYS (ADM = NO)
Role => SELECT_CATALOG_ROLE (ADM = NO) which is granted to =>
Role => OLAP_USER (ADM = NO) which is granted to =>
User => SYS (ADM = YES)
Role => DBA (ADM = YES) which is granted to =>
User => ABS (ADM = NO)
User => SYS (ADM = YES)
User => SYSMAN (ADM = NO)
User => YU (ADM = NO)
User => ABS_TYPES (ADM = NO)
User => SYSTEM (ADM = YES)
Role => IMP_FULL_DATABASE (ADM = NO) which is granted to =>
User => SYS (ADM = YES)
Role => DBA (ADM = NO) which is granted to =>
User => ABS (ADM = NO)
User => SYS (ADM = YES)
User => SYSMAN (ADM = NO)
User => YU (ADM = NO)
User => ABS_TYPES (ADM = NO)
User => SYSTEM (ADM = YES)
Role => OLAP_DBA (ADM = NO) which is granted to =>
Role => DBA (ADM = NO) which is granted to =>
User => ABS (ADM = NO)
User => SYS (ADM = YES)
User => SYSMAN (ADM = NO)
User => YU (ADM = NO)
User => ABS_TYPES (ADM = NO)
User => SYSTEM (ADM = YES)
User => OLAPSYS (ADM = NO)
User => SYS (ADM = YES)
User => SH (ADM = NO)
Role => EXP_FULL_DATABASE (ADM = NO) which is granted to =>
Role => DBA (ADM = NO) which is granted to =>
User => ABS (ADM = NO)
User => SYS (ADM = YES)
User => SYSMAN (ADM = NO)
User => YU (ADM = NO)
User => ABS_TYPES (ADM = NO)
User => SYSTEM (ADM = YES)
User => SYS (ADM = YES)
User => PERFSTAT (ADM = NO)
User => SYS (ADM = YES)
User => IX (ADM = NO)
Таким образом, можно определить пользователей, получивших права SELECT ANY DICTIONARY или SELECT ANY TABLE.
Привилегия SELECT ANY TABLE работает только в случае, если o7_dictionary_accessibilty=TRUE
Пусть в информационной системе (ИС) имеется злоумышленник, который в некоторый момент времени начинает атаку на эту ИС путем подбора пароля для какого-либо учетной записи.
Для того чтобы гарантированно подобрать пароль, ему придется выполнить SL попыток, где S - это мощность алфавита, из которого выбираются символы пароля, а L - длина пароля. Если каждая попытка требует ввода C символов (логин + пароль), а злоумышленник вводит символы со скоростью R знаков в секунду, то на каждую попытку ввода пароля требуется C/R секунд. Если в системе предусмотрена задержка D секунд, срабатывающая при вводе неверных реквизитов, то время на одну попытку потребуется C/R+D секунд.
В результате общее время, необходимое, чтобы перебрать всевозможные пароли, выражается формулой
где (D+C/R) определяет полное время, затрачиваемое нарушителем на одну попытку подбора пароля, SL - общее количество возможных паролей.
Можно математически доказать, что, в среднем, время, которое потребуется злоумышленнику до того момента, когда он найдет правильный пароль, в два раза меньше
Коэффициент ½ появился потому, что величина SL(D+C/R) есть максимальное время, т.е. время перебора злоумышленником всех возможных значений. А вот среднее значение (математическое ожидание случайной величины, в течение которого система защиты не поддается взлому) равно половине максимального времени для равномерно распределенных случайных величин. Отсюда и коэффициент ½.
Если злоумышленник производит ряд случайных попыток в течение времени t, то вероятность взлома системы защиты за это время есть отношение t/T:
Таким образом, администратор обладает простым и эффективным средством для определения вероятности взлома, в зависимости от конкретных параметров, установленных в конкретной системе.
Предположим, что необходимо вычислить минимальную длину пароля при прочих фиксированных параметрах, чтобы злоумышленник за время t не смог подобрать пароль с вероятностью большей, чем некоторое малое p. Тогда, так как SL = (t*R)/(P*(D+C/R)* C), то можно записать
Попробуем рассчитать нижнюю границу для Тб для СУБД Oracle, для чего сделаем несколько реальных предположений. Пусть нарушитель работает со скоростью 100 символов в секунду (R). Длина логина пусть будет 3 и 6 знаков (SYSTEM и SYS), длина пароля 8 знаков, а задержка отсутствует. В результате, получаем, что злоумышленник будет трудиться
Логин | Длина логина | Длина пароля | Тб |
System | 6 | 8 | 123 668 лет |
Sys | 3 | 8 | 194 336 лет |
Вроде бы немало лет набегает даже для 8-значных паролей. Но данное расчетное значение справедливо только при низкой скорости ввода паролей и отсутствии других путей, позволяющих получить пароль с меньшей вычислительной сложностью. Однако в действительности в СУБД Oracle это значение намного меньше.
1(обратно к тексту) | Не во всех версиях СУБД Oracle выдерживается значение 56 бит. В силу ограничений экспортного законодательства США в 80-90 гг., запрещающего продавать за рубеж ПО и аппаратуру, содержащие стойкие криптографические алгоритмы, длина ключа для экспортных версий СУБД Oracle искусственно занижалась до 40 бит, что облегчает правительству США чтение шифрованной информации. Признание этого факта содержится в "Oracle Database Advanced Security Administrator's Guide" страница 1-4: "Prior versions of Oracle Advanced Security provided three editions: Domestic, Upgrade and Export, each with different key length. Oracle Advanced Security 10g Release 2 (10.2) contains a complete complement of the available encryption algorithms and lengths, previously only available in the Domestic edition. … The U.S. government has relaxed its export guidelines for encryption products. Accordingly, Oracle can ship Oracle Advanced Security with its strongest encryption features to all of its customers" В последние годы экспортный контроль Гос. Департаментом США был значительно ослаблен, поскольку производители ПО и электроники стали нести слишком большие потери (упущенная выгода), из-за этих ограничений. |