//5. ШИФРУЕМ СИММЕТРИЧНЫЕ КЛЮЧИ С ПОМОЩЬЮ ОТКРЫТОГО КЛЮЧА RSA: String AllKey new CipherRSA() KeyCipher.encrypt(AllKey, openKey) //кодируем String codeAllKey KeyCipher.getCodeText


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Пя5кин

С.Н.

С6ще45в6ющее ан5иви364н1е 231г3а
ммн1е 1бе42ечение

Те13е5иче4кая ча45ь

ённ15ация

Пе3ед 5ем, как нача5ь анализ 46ще45в6ющег1 ан5иви364н1г1 231г3аммн1г1 1бе42ечения,
451и5 3а44м153е5ь
целе411б3азн145ь и421льз1вания данных 231д6к51в в цел1м. О5 чег1
же мы 2ы5аем4я защи5и5ь4я? П1231б6ем к3а5к1 1к6н65ь4я в и4513ию и 3а44м153е5ь
6г31з6 в2л15ь д1 наших дней. И4513ию к1м2ью5е3ных ви3641в, как идеи, м1жн1 начина5ь
4 1951 г1да, 4 м1мен5а, к1гда

аме3икан4кий ма5ема5ик Дж1н 71н Нейман 23едл1жил
ме51д 41здания 4ам1в14231изв1дящих4я механизм1в (ав51ма51в), 12и3ая4ь на
41б45венн6ю 5е13ию [1]. П3ед21лагал ли 71н Нейман, ч51 ег1 идея 6же че3ез S0 ле5 б6де5
на23авлена в де4536к5ивн1е 364л1 15
-
ле5ним шк1
льник1м Рича3д1м Ск3ен51м (
Elk

Cloner
), к1513ый на2ише5 1дин из 2е3вых к1м2ью5е3ных ви3641в в и4513ии [R]? ё 51, ч51
6же к R014 г1д6 э5и идеи б6д65 яд31м, 215енциальн1, 4ам1г1 3аз36ши5ельн1г1 136жия в
и4513ии чел1вече45ва? За SS г1да 3азвивала4ь не 51льк1
к1м2ью5е3ная 153а4ль, 45авшая в
R1 веке 7лагман1м 3азви5ия 1бще45ва и к362нейшей инд6453ией на 2лане5е, акк6м6ли36я
в1к36г 4ебя мн1же45в1 д36гих на23авлений. За э51 в3емя 21явил14ь немы4лим1е
к1личе45в1 к1м2ью5е3ных ви3641в, 43ед45в их внед3ения, 231г3амм
-
ш2и1н1в и 231чег1
231г3аммн1г1 1бе42ечения, к15131е 4 легк145ью на36шае5 не 1дин зак1н люб1й 453аны.
П3иведем 23име3ы наиб1лее изве45ных ви3641в: «"е3вь М133и4а» 2а3ализ1вавший в
1988 г1д6 ве4ь 53а77ик

и 23ине4ший 6бы5к1в на 96.5 милли1н1в д1лла31в
;
«Win9x.CIH» в 1999 г1д6, 231званный в дальнейшем как «"е3н1быль»
-

л1гиче4кая
б1мба, за7ик4и31ванная на б1лее чем 500 5ы4. к1м2ью5е31в 21 в4ем6 ми36,
6нич51жающая данные на же45ких ди4ка и 45и3ающая 41де3жим1е
flash

BIOS

и в 51м же
г1д6 ми3 21знак1мил4я
4 ма441в1й а5ак1й на 21ч51вые 4е3ве3а ви3641м «
Melissa
»,
46мма3ный 6ще3б 15 к15131г1 4145авил б1лее 100 милли1н1в д1лла31в и же35вами
к15131г1 45али 5акие
IT
-
гиган5ы как
Intel

и
Microsoft
; «
I

love

you
»
-

ви364, названный
наиб1лее в3ед1н14ным за в4ю
и4513ию, 23ине4ший к1л144альный денежный 6ще3б в 5.5
миллиа3д1в д1лла31в и за3азивший 1к1л1 10% в4ех к1м2ью5е31в на 2лане5е в R000 г1д6;
ви364 «
Zeus
» 21явивший4я в R007 г1д6, к3авший денежные 43ед45ва 4 банк1в4ких 4че51в
клиен51в вед6щих ев312ей4ких банк1в

и 23ичинивший 6ще3б в S6 млн. д1лла31в и
2


нак1нец, 21жал6й 4амая 3ез1нан4ная и 215енциальн1 12а4ная для в4ег1 ми3а кибе36г31за
-

«WinSR/Stuxnet»
-

2е3вый в ми3е 231мышленный ви364, 1бна36женный в R009 г1д6 и
наделавший ма446 ш6михи на межд6на31дн1й а3ене и
з
-
за ег1 231явления на И3ан4ких
яде3ных 45анциях [S]. И в4е э51 51льк1 ка2ля в м13е к1м2ью5е3ных и, 4 15н14и5ельн1
недавних 213, м1бильных к1м2ью5е3ных зл1в3ед1в. Те2е3ь, выя4нив, 15 чег1 же мы
защищаем4я, мы, не желая 45а5ь ча45ью б15не5а и 15дава5ь данны
е 1 4в1их банк1в4ких
ка35 в 36ки зл16мышленник1в, 21льз6я4ь 64л6гами ин5е3не5 магазин1в, не желая 53а5и5ь
ма446 в3емени и денег 21льз6я4ь 64л6гами 42ециализи31ванных 4е3ви41в или в1в4е ид5и
за н1вым желез1м, и не желая и42ы5ыва5ь мн1гие д36гие 231блемы
\
не6
д1б45ва,
4вязанные 4 за3ажением к1м2ью5е3а (65ечка иных 2е341нальных данных и 5.д.),
3а44м153им 46ще45в6ющие ан5иви364ные 231г3аммные 231д6к5ы, их 2лю4ы и мин64ы, а
5ак же 23инци2ы их 3аб15ы, 1днак1 451и5 4каза5ь 43аз6, ч51 никак1е ан5иви364н1е
231г3аммн1е

1бе42ечение не дае5 вам 100% га3ан5ий 15 за3ажения, 1днак1 в замен м1же5
да5ь 4в1ев3еменн6ю 21дде3жк6.

О4н1вная ча45ь

Как мы выя4нили 3анее, наличие 6г31з в 4е5и, 2131ждае5 2153ебн145ь в ан5иви364н1м
231г3аммн1м 1бе42ечении, 3ын1к к15131г1 из1бил6е5 к1лич
е45в1м 23едл1жений 15
3азличных к1м2аний. На 4ег1дняшний день изве45н1 б1лее 60 3азличных ан5иви364ных
231г3амм [4], 1днак1, в 3амках э51й 45а5ьи 3а44м153им наиб1лее изве45ные из них
(21лный 42и41к 46ще45в6ющих 23ил1жений м1жн1 най5и 21 44ылке): 231д6к5ы
Л
аб13а513ии Ка42е34к1г1,
Dr
.
Web
, Avast,
Comodo
, ESET NODSR, и Panda. О4н1вывая4ь
на 45а5и45ике заг36з1к 23едл1жений 12и4ываемых к1м2ании, взя51й за 2е3и1д IV
ква35ала R01S г1да [5], м1жн1 4дела5ь выв1д, ч51 21давляющее б1льшин45в1 к1нечных
21льз1ва5елей не

г151вы 2ла5и5ь за ан5иви364ный 4175 (Ри4. 1).

3



Ри4. S С5а5и45ика заг36з1к за IV ква35ал R01S г1да

Люб1й к362ный 231изв1ди5ель де
-
7ак51 заб15и54я 1б 6д1б45ве и421льз1вания 4в1ег1
231д6к5а, 21э51м6 5ак1й 76нкци1нал как: мн1г1язычн145ь, 41здание ежеме4ячны
х
15че51в, иг31в1й 3ежим (в 21лн1эк3анн1м 3ежиме не в42лываю5 6вед1мления),
ав511бн1вление, 41здание ди4ка в1445ан1вления и
safe
-
lists

(41здание 42и4к1в д1ве3енных
23ил1жений/4ай51в) 21 6м1лчанию 23и46545в6ю5 в кажд1м 231д6к5е. Однак1,
3а44м153им б1лее де
5альн1 кажд1е из выше2е3ечи4ленных 23едл1жений.

Avast
!


чеш4кий 231изв1ди5ель ан5иви364н1г1 231г3аммн1г1 1бе42ечения, начавший
4в1й 265ь в 1991 г1д6 и вы264кающий на 4ег1дняшний день ан5иви364ные 3ешения как
для ПК 21д 623авлением 4и45ем 4емей45ва
Windows
,
Unix
-
21д1бных ОС и
Mac

OS
, 5ак и
для м1бильных 64531й45в на
Android
, Palm и
Windows

CE
. Один из немн1гих
231изв1ди5елей, к1513ые вы264каю5 21лн145ью бе42ла5ные ве34ии 4в1ег1 231д6к5а (х15ь
и 4 23иличн1 63езанным 76нкци1нал1м, к15131г1 1днак1 в21лне д145а
51чн1 для 3яд1в1г1
д1машнег1 21льз1ва5еля). В4е ве34ии 1бладаю5 14н1вными для люб1г1 ан5иви364а
в1зм1жн145ями, 5акими как: эв3и45иче4кий анализ 41де3жим1г1, наличие 3езиден5н1г1
м1д6ля, 31ди5ель4кий к1н531ль, в1зм1жн145ь выб13а гл6бины 4кани31вания и выб13

дальнейших дей45вий 21 15н1шению к 21д1з3и5ельн1м6 7айл6. Однак1, AvastA
един45венный 231д6к5, 4кани36ющий ОС д1 ее 21лн1г1 за264ка в 1бх1д д3айве3а
7айл1в1й 4и45емы, и421льз6я 23ям1й д14562 к же45ким ди4кам. Так же 451и5 15ме5и5ь
5ехн1л1гию DeepScreen 23
инимающ6ю б1лее 1б14н1ванные 3ешения к 21д1з3и5ельным
7айлам и включающ6ю в 4ебя динамиче4к6ю дв1ичн6ю 53ан4ляцию (незаме5н6ю для
21льз1ва5еля к1м2иляцию наб13а к1манд на д36г1м наб13е, ме51д1м эм6ляции [6]). На
э51м заканчиваю54я бе42ла5ные в1зм1жн145и 23
1д6к5а и на4562ае5 в3емя 2ла5ных, 5аких
4


как: 2е41чница 21 53еб1ванию,
SafeZone

(без12а4н1е 231ведение банк1в4ких 12е3аций),
наличие б3андма6э3а и ан5и
-
42ама, 21лная бл1ки31вка 4е5и 21 53еб1ванию, ан1нимайзе3
в 15к3ы5ых
Wi
-
Fi

4е5ях 43ед45вами
VPN

56ннели31вания, 6даленный д14562 и ш3еде3
данных (для 21лн1г1 6даления не1бх1дим1й ин713мации). Цены наиб1лее
дем1к3а5ичные 21 15н1шению к д36гим 231изв1ди5елям и начинаю54я 15 1150 36блей за
г1д и421льз1вания на 1дн1й машине.

Лаб13а513ия Ка42е34к1г1 нача
ла 4в1ю дея5ельн145ь в 1997 г1д6 и являе54я 1дним из
лиде31в в 1бла45и ан5иви364ных 231д6к51в. П3едлагае5 21льз1ва5елю как 1бычный
ан5иви364
-

ён5иви364 Ка42е34к1г1 (
KAV
), 5ак и 231д6к5а на ег1 14н1ве
-

Kaspersky
Internet Security (
KIS
), 41вмещающий в 4ебе

5ак же 76нкции меж4е5ев1г1 эк3ана.
Обладае5 4х1жим 76нкци1нал1м, ч51 и
Avast
A, 1днак1 5ак же не4е5 в 4ебе м1д6ль
1бе42ечения без12а4н145и для 4и45ем мгн1венн1г1 1бмена 411бщений,
HIPS
-
м1д6ль,
21лный м1ни513инг ак5ивн145и 4е5и, за264к 51льк1 без12а4ных (21

мнению 231д6к5а)
231г3амм и 4и45ем6 бл1ки31вки банне31в (5и2а
winlock

или не зак3ывающег14я к1н5ен5а
на 4ай5ах) [8]. В ве34ии R014 г1да 4ильн1 6л6чшена 231изв1ди5ельн145ь, в вид6 51г1 4
давних 213 231д6к5ы Лаб13а513ии Ка42е34к1г1 4чи5аю54я «5яжелыми» для
4и45емы.
KIS

не 3а4231453аняе54я на 1 ПК и 231дае54я 21 цене в 1600 36блей на R машины (
KAV

в
4в1ю 1че3едь за 1R00 36блей).

Comodo
, 14н1ванная в 1997 г1д6 х15ь и являе54я 3аз3аб15чик1м ан5иви364н1г1 ПО, в4е
же б1льше изве45на как 2145авщик 4е35и7ика51в
SS
L

[9]. П31д6к5 Comodo Internet
Security включае5 в 4ебя как ан5иви364, 5ак и 2е341нальный 7айе3в1л (выб131чная
645ан1вка), 15личи5ельн1й 141бенн145ью к15131г1 являе54я 51, ч51 1н м1же5 бы5ь
и421льз1ван как 2ла5н1 5ак и бе42ла5н1. Из 141бенн145ей не выявлен
ных 6 23едыд6щих
231д6к51в э51 наличие м1д6ля
HIPS
, 15ве545венн1г1 за 23ед15в3ащение в513жений на
14н1ве 21веденче4к1г1 анализа, а 5ак же и421льз1вание «1блачных 5ехн1л1гий», в
145альн1м явных 23еим6ще45в 2е3ед 145альными 231д6к5ами не5 [10]. С51им145ь
лиц
ензии 4145авляе5 1550 36блей, в 451им145ь к15131й вх1ди5 51льк1 76нкция GeekBuddy


к36гл14651чная англ1язычная 21дде3жка, ч51 е45ь ве4ьма 41мни5ельн1е 23и1б3е5ение.

Dr
.
Web

занимае54я 3аз3аб15к1й ан5иви3641в 4 1994 г1да, а 5ак же вы264кае5 на их 14н1ве
м
еж4е5евые эк3аны. В 231д6к5ах к1м2ании
Dr
.
Web

не замечен
HIPS
, 1днак1, 21мим1
14н1вных 76нкций и м1д6лей 23и46545в6ющих в 2е3ечи4ленных 231д6к5ах, е45ь и д36гие
141бенн145и, на23име3, Origins Tracing


алг13и5м не4игна563н1г1 1бна36жения
в3ед1н14ных 1бъек
51в, д121лняющий 4игна563ный и эв3и45иче4кий анализ, в1зм1жн145ь
5


645ан1вки на за3аженн6ю машин6, благ1да3я защищенн1м6 ин45алля5136, м1д6ль
SelfPROtect, благ1да3я к15131м6 15 изменения защищаю54я к1м21нен5ы 231д6к5а, а 5ак
же к31442ла5713менн145ь и и421льз
1вание 1блачных 5ехн1л1гий [11]. Цены начинаю54я
15 1R90 36блей за 1 г1д и421льз1вания на 1 ПК и 1 м1бильн1м 64531й45ве (21д1бн1е
23едл1жение 51же м1жн1 выдели5ь как 141бенн145ь 3а4231453анения 231д6к5а).

Panda Cloud Antivirus


ан5иви364н1е ПО, 3аз3аба5ыв
аем1е Panda Security, 41че5ае5 в 4ебе
76нкции ан5иви364а и меж4е5ев1г1 эк3ана, 15личи5ельные 141бенн145и


41здание
141бых кэшей, 21зв1ляющих 41к3а5и5ь в3емя 231ве3ки 23и 21в513н1м 4кани31вании, а
5ак же 3аб15а 21 4и45еме S+S (Software plus Services), к1гд
а ча45ь 3аб15ы 645ан1вленн1й
21льз1ва5елем 231г3аммы 231и4х1ди5 в «1блаке» на 4е3ве3ах Panda Security и421льз6я
4и45ем6 Collective Intelligence, д145игая 5ем 4амым вы41к1й 231изв1ди5ельн145и 4
минимальн1й наг36зк1й на к1м2ью5е3 и избавляя 21льз1ва5еля 15 2
153ебн145и
1бн1вления 4игна563 (на к1м2ью5е3е 21льз1ва5еля нах1дя54я ин4536мен5ы 21451янн1г1
анализа и эв3и45ики) [1R]. Цены 15 1500 36блей за 1 г1д на 1 к1м2ью5е3е.

Нак1нец ESET NODSR Smart Security, 41зданный 7и3м1й ESET, к31ме 45анда35ных
м1д6лей, 1блад
ае5 м1д6лем HIPS, 6же 21зв1ляющим на453аива5ь 21ведение 4и45емы в
цел1м и кажд1й её ча45и. Важная 141бенн145ь заключае54я в минимальн1м и421льз1вании
4и45емных 3е46341в благ1да3я 51м6, ч51 б1льшая ча45ь к1да на2и4ана на а44ембле3е [1S].
Из д36гих 141бенн14
5ей д1451йны внимания 4лед6ющие: 76нкция ан5и
-
в13, ак56альная
для м1бильных 4и45ем, 3а4ши3енная 76нкции защи5ы 15 эк42л1й51в, 21зв1ляющая
забл1ки31ва5ь «бл1ки31вщики» эк3ан1в и 231г3аммы
-
вым1га5ели на люб1м
645ан1вленн1м ПО, к1н531ль 21дключаемых
USB
, а 5а
к же 76нкция ESET Social Media
Scanner 146ще45вляющая защи56 2317илей 21льз1ва5еля в 41циальных 4е5ях [14]. Данный
231д6к5 являе54я наиб1лее д131гим из 3а44м153енных
-

1750 36блей, н1 в 4в1ю 1че3едь
дае5 23ав1 645ан1вки на S ПК.

Ра44м153ев лиде31в в 1бла4
5и 41здания ан5иви364н1г1 231г3аммн1г1 1бе42ечения 451и5
6дели5ь 141б1е внимание 5ем 76нкциям, к1513ые были названы 14н1вными для кажд1г1
231д6к5а имеющем6 23ав1 называ5ь4я ан5иви364ным ПО. "51 же м1жн1 назва5ь
ан5иви3641м? ён5иви364ная 231г3амма


42ециал
ьная 231г3амма для 1бна36жения
к1м2ью5е3ных ви3641в, а 5акже в3ед1н14ных 231г3амм в11бще и в1445ан1вления
за3ажённых 5акими 231г3аммами 7айл1в, а 5акже для 23ед15в3ащения за3ажения 7айл1в
или 12е3аци1нн1й 4и45емы в3ед1н14ным к1д1м [15]. Данные 231г3аммы м1
жн1
кла44и7ици31ва5ь 21 не4к1льким 23изнакам:

6


П1 и421льз6емым 5ехн1л1гиям ан5иви364н1й защи5ы:



ён5иви364ы 4 4игна563ным ме51д1м 123еделения



ён5иви364ы на 14н1ве 231ак5ивн1й защи5ы



К1мбини31ванные ан5иви364ы, 41вмещающие в 4ебе и 4игна563ный ме51д и
231ак5ивн6ю защи56

П1 76нкци1нал6 231д6к51в:



ён5иви364ы (51льк1 ан5иви364ная защи5а)



К1мбини31ванные 231д6к5ы (21мим1 ан5иви364н1й защи5ы включаю5 в 4ебя
меж4е5ев1й эк3ан, ан5и
-
42ам и д36гие 5ехн1л1гии)

П1 целевым 2ла5713мам:



П31д6к5ы для 4и45ем
Windows



П3
1д6к5ы для
UNIX
-
21д1бных 4и45ем



П31д6к5ы для
MacOS



П31д6к5ы для м1бильных 2ла5713м

С1в3еменные 23едл1жения 3ынка ан5иви364н1г1 ПО 23едлагаю5 4в1и 231д6к5ы для в4ех
6казанных в кла44и7икации 12е3аци1нных 4и45ем, а 5ак же 21 ме3е над1бн145и к1нечный
21льз1ва5ель 3ешае5 д145а51чн1 ли ем6 ан5иви364а или в ег1 2153ебн145ь вх1ди5
к1мбини31ванный 231д6к5, 21э51м6 451и5 6делим внимание 5ехн1л1гиям защи5ы.

Сигна563ный 21и4к являе54я ме51д1м 3еак5ивн1й защи5ы и 14н1вывае54я на 1б3ащении
ан5иви3641м к 4в1им,
4145авленным ав513ами 231д6к5а, базам 4игна563 а5ак ви3641в
(ха3ак5е3ным 23изнакам а5аки или ви364а [16]) в 231це44е 2314м153а 7айла. Сигна563а
а5аки м1же5 бы5ь либ1 4ин5ак4иче4к1й, взя51й на23ям6ю из 5ела ви364а или а5аки, либ1
14н1ванн1й на 21ведении 21д
1з3и5ельн1г1 1бъек5а, на23име3, 4лишк1м аг3е44ивный
12314 как1г1
-
либ1 2135а. В 4л6чае 4115ве545вия 6ча45ка к1да 21д1з3и5ельн1й 231г3аммы
изве45н1й 4игна563е, ан5иви364 23ед45авляе5 21льз1ва5елю выб13 дальнейшег1 дей45вия:
6даление за3аженн1г1 7айла, 1523ав
ка в ка3ан5ин или 23ед23иня5ь 212ы5к6
в1445ан1вления 7айла, 265ем 6даления ви364а из 5ела 7айла.

Для 4в1ев3еменн1г1 1бна36жения 4игна563ным ме51д1м не1бх1дим1 в1в3емя 1бн1вля5ь
баз6 4игна563, к1513ая 41здае54я в36чн6ю в 3ез6ль5а5е анализа не4к1льких к12ий
7айла
41де3жащих 1дин и 515 же ви364. Для 6меньшения л1жн1г1 43аба5ывания 4игна563а
д1лжна 41де3жа5ь 51льк1 6никальные 4531ки к1да. Се3ьезн1й 231блем1й для
231изв1ди5елей ан5иви364н1г1 231г3аммн1г1 1бе42ечения являе54я 4в1ев3еменная
д145авка н1вых 4игна563
, 214к1льк6 межд6 на2и4анием 4игна563ы и м1мен51м
7


1бн1вления баз 4игна563 к1нечн1г1 21льз1ва5еля м1же5 231й5и д145а51чн1е к1личе45в1
в3емени, ч51бы ви364 за3азил к1л144альн1е к1личе45в1 машин [17]. Сигна563ная база
являе54я яд31м люб1г1 ан5иви364н1г1 231д6
к5а.

Плю4ы и мин64ы 4игна563н1г1 21и4ка:



Даю5 в1зм1жн145ь иден5и7ици31ва5ь а5ак6 4 вы41к1й 51чн145ью и минимальными
л1жными 43аба5ываниями



Беззащи5ны 2е3ед 21лим137ными ви364ами



Т3еб6ю5 3ег6ля3н1г1 и 4в1ев3еменн1г1 1бн1вления



Не м1г65 123едели5ь н1вые а5а
ки


Д36г1й кла44 ме51д1в и421льз6емых для 1бна36жения 6г31з 21л6чил название
231ак5ивн1й защи5ы, и 14н1вывае54я 6же не на имеющих4я 4ведениях 1 ви364е, а на
21ведении 7айла и 212ы5ке 23ед15в3ащения за3ажения. Се3ьезным нед145а5к1м данн1г1
вида защи5ы являе
54я вы41кая д1ля л1жных 43аба5ываний на леги5имных 231г3аммах.
С6ще45в6ющие 5ехн1л1гии 231ак5ивн1й защи5ы 23ед45авлены на 3и46нке R
[]
.


Ри4. 4 Ме51ды 231ак5ивн1й защи5
ы

Разбе3ем 15дельн1 каждый из ме51д1в.

Эв3и45иче4кий анализ
-

41в1к62н145ь 76нкций,
и421льз6емых в ан5иви364н1м ПО
2а3аллельн1 4 4игна563ным 21и4к1м, 21 1бна36жению не неизве45ных 4игна563ным
базам в3ед1н14ных 231г3амм, н1 в 51 же в3емя э515 же 5е3мин 1б1значае5 1дин из
к1нк3е5ных 42141б1в. Эв3и45ика 21зв1ляе5 1бна36жива5ь 3анее неизве45н
ые
8


в3ед1н14ные 231г3аммы, 4л1жные 21лим137ные и ши736ющие4я ви364ы, 1днак1,
лечение в 21давляющем б1льшин45ве 4л6чаев 1казывае54я нев1зм1жным. О21знанная
в3ед1н14ная 231г3амма м1же5 бы5ь 1523авлена 231изв1ди5елю ан5иви364н1г1 ПО, и для
лечения в 5аких 4л6ч
аях 53еб6е54я д121лни5ельн1 1бн1вление баз 4игна563.

Ме51ды эв3и45иче4к1г1 анализа не даю5 га3ан5и31ванн1й защи5ы 15 н1вых,
1546545в6ющих в базах 4игна563, ви3641в. Э51 1бъя4няе54я 5ем, ч51 в каче45ве 1бъек5а
анализа и421льз6ю54я 4игна563ы 3анее изве45ных
ви3641в, а в каче45ве 23авил
эв3и45иче4к1й ве3и7икации



знаний 1 механизме 21лим137изма 4игна563. Э51 знание
бази36е54я на эм2и3иче4ких 23ед21л1жениях в вид6 чег1 нельзя и4ключа5ь в1зм1жн145ь
л1жных 43аба5ываний.

В 231це44е эв3и45иче4к1г1 анализа 231и4х1д
и5 231ве3ка эм6ли36ем1й 231г3аммы
анализа5131м к1да. На23име3, 231г3амма за3ажена 21лим137ным ви3641м, к1513ый
41451и5 из заши731ванн1г1 5ела и 3а4ши731вщика. Эм6ля513 к1да 4чи5ывае5 наб13
ин4536кции в б67е3 ан5иви364а, 3азби3ае5 их на ин4536кции и 211че3е
дн1 и421лняе5 их,
214ле э51г1 анализа513 к1да 21д4чи5ывае5 к1н531льн6ю 46мм6 и 4ве3яе5 её 4 51й, к1513ая
х3ани54я в базе. Эм6ляция б6де5 231и4х1ди5ь, 21ка не1бх1димая для 21д4че5а
к1н531льн1й 46ммы ча45ь ви364а не б6де5 3а4ши731вана. Е4ли 4игна563а 41в2ала



231г3амма 123еделена [19].

Плю4ы и мин64ы:



В1зм1жн145ь де5ек5и31ва5ь 3анее неизве45ные 6г31зы.



Вы41кая 21д1з3и5ельн145ь эв3и45иче4к1г1 анализа513а 6величивае5 к1личе45в1
л1жных 43аба5ываний 23и наличии в леги5имн1й 231г3амме нек1513ых ча45ей
к1гда,
к1513ые вы21лняю5 4х1жие для ви3641в дей45вия или 214лед1ва5ельн145и
дей45вий.



С6ще45в1вания не 4л1жных ме51д1в 1бмана эв3и45иче4к1г1 анализа513а. П3ежде
чем 3а4231453аня5ь в3ед1н14н1е ПО, ег1 ав513 и44лед6е5 46ще45в6ющие
ан5иви364ные 231д6к5ы ме51дами для

избегания де5ек5и31вания 23и
эв3и45иче4к1м анализе, на23име3, вид1изменяя и4х1дный к1д и д121лняя ег1
элемен5ами, к1513ые не 21дде3живае5 в4531енный в ан5иви364 эм6ля513 к1да.



Даже 23и 123еделении в3ед1н14н1г1 ПО лечение в 21давляющем б1льшин45ве
4л6чаев
нев1зм1жн1.


9


След6ющий ме51д 231ак5ивн1й защи5ы


эм6ляция к1да, 21явившая4я в начале 90х
г1д1в. Т1лчк1м к 21явлению ме51да 45ал1 1бна36жение 3анее неизве45ных


21лим137ных ви3641в. Ме51д дае5 в1зм1жн145ь за264ка 23ил1жения в 42ециальн1й 43еде
эм6ляции, г
де 1н1 не 4м1же5 нане45и в3еда, 5ем 4амым ими5и36я 21ведение
12е3аци1нн1й 4и45ем или ЦПУ и 4аб15и36я 231явление в3ед1н14ных 4в1й45в 231г3аммы.
Различаю54я R 42141ба эм6ляции к1да: 2е3вый
-

53а44и31вка 231г3аммы, 5.е. заг36зка в
2амя5ь и и421лнение 4 и421л
ьз1ванием 15лад1чн1г1 23е3ывания. Нед145а51к ме51да
41451и5 в 51м, ч51 21льз1ва5ель м1же5 23е3ва5ь 231це44 53а44и31вки, ч51 в к1нечн1м
4че5е 23иве5е к 43аба5ыванию вн653и 21лим137н1г1 ви364а де4536кций, ч51 23иведе5 к
вы21лнению 15ве5ных де4536кций 41 4513
1ны ан5иви364а в 231це44е эм6ляции. В5131й


эм6ляция 4 3азбиением на ин4536кции и их вы21лнение в эм6ли36ем1й 43еде, ч51
являе54я б1лее без12а4ным 42141б1м 21 43авнению 4 2е3вым. Д1264кае54я
к1мбини31вание э5их ме51д1в.

Не4м153я на каж6щ6ю4я э77ек5ивн145ь

данн1г1 ме51да, 1н не лишен нед145а5к1в,
1чевидн1, ч51 эм6ляция занимае5 4лишк1м мн1г1 в3емени и 3е46341в к1м2ью5е3а, ч51
153ица5ельн1 4казывае54я на бы4531дей45вии 23и вы21лнении 21в4едневных 12е3аций,
5акже, 41в3еменн1е

в3ед1н14н1е ПО 42141бн1 1бна36жив
а5ь вы21лнение в
эм6ли31ванн1й 43еде и 23ек3а5и5ь 4в1е вы21лнение [18][R0].

Далее 21 26нк5ам


анализ 21ведения. О4н1вывае54я ме51д на 2е3ехва5е в4ех важных
4и45емных 76нкций в 3ежиме 3еальн1г1 в3емени или на 645ан1вке 7иль531в,
21зв1ляющих 154лежива5ь ак5
ивн145ь в 21льз1ва5ель4к1й 4и45еме. П1веденче4кий анализ
21зв1ляе5 1цени5ь не 51льк1 к1нк3е5н1е в1здей45вие, н1 и це2ь дей45вий, ч51 на 213яд1к
21вышае5 э77ек5ивн145ь 1бна36жения ви364ных 6г31з. П1мим1 7иль531в, нек1513ые
3еализации 5ехн1л1гии 21зв1ляю5 к1
33ели31ва5ь 5ек6щее дей45вие 231г3аммы 4 3анее
вы21лненными 76нкциями э51й 231г3аммы. В зави4им145и 15 3ез6ль5а5а к133еляции,
дей45вие либ1 23изнае54я леги5имным, либ1 за23ещае54я и кла44и7ици36е54я как
21д1з3и5ельн1е, 5ем 4амым бл1ки36я за264к [R1]. В д12
1лнение к1 в4ем6, анализ
21ведения являе54я 5ехн1л1гиче4к1й 14н1в1й для цел1г1 кла44а 231г3амм


21веденче4ких бл1ки3а5131в (HIPS).

Sandboxing
, 1на же «2е41чница». Техн1л1гия, 3аб15ающая 21 23инци26 1г3аничения
ак5ивн145ь 215енциальн1 12а4н1г1 ПО 5аким 1б
3аз1м, ч51бы 1н1 не м1гл1 нане4и в3еда
4и45еме. Ог3аничение ак5ивн145и д145игае54я 5ем, ч51 вы21лнение неизве45ных
23ил1жений 231и4х1ди5 в 1г3аниченн1й 43еде


2е41чниц6, где 23ил1жение не имее5
10


д14562а к важн1й ин713мации, 4и45емных 7айлам или ве5кам 3ее4
53а.
Sandboxing

1бычн1
23ед45авляе5 из 4ебя к1н531ли36емый наб13 3е46341в (ме451 в
RAM

или на
HDD
) для
и421лнения г145ев1й 231г3аммы. В 2е41чнице в4е не1бх1димые ви3646 3е4634ы
эм6ли36ю54я или 4ильн1 1г3аничиваю54я. Важный нед145а51к 2е41чницы


вы41кая
на
г36зка на 4и45ем6, именн1 21э51м6 зача456ю
Sandboxing

и421льз6е54я для
21д1з3и5ельных 7айл1в из неизве45ных и451чник1в [RR]. Техн1л1гия 5ак же нашла
23именение в 231це44е 3аз3аб15ки 231г3аммн1г1 1бе42ечения, к1гда «4ы31й» к1д м1же5
нав3еди5ь 4и45еме.

П14ле
дней являе54я 5ехн1л1гия ви356ализации 3аб1чег1 1к36жения, 14н1в1й к15131й
являе54я 4и45емный д3айве3 2е3ехва5ывающих за2314ы на за2и4ь на же45кий ди4к и
вы21лняющий за2и4ь в 42ециальный б67е3 в ди4к1в1й 1бла45и. Важна данная 5ехн1л1гия
в 4л6чае, к1гда в3е
д1н14н1е ПО 6же за26щен1, 5ак как 231жи5ь 1н1 4м1же5 не дальше
чем д1 1чи45ки б67е3а 23и выключении к1м2ью5е3а. Однак1, ви356ализация 3аб1чег1
1к36жения не защищае5 15 ПО, целью к15131г1 являе54я к1н7иденциальная ин713мация,
214к1льк6 ч5ение 4 ди4ка в э51м

4л6чае не за23ещен1.

Как мы видим, в 23инци2ы 3аб15ы люб1г1 ан5иви364н1г1 231г3аммн1г1 1бе42ечения
вх1дя5 д145а51чн1 м1щные 5ехн1л1гии 42141бные не 51льк1 выяви5ь за3ажение, н1 и
23ед15в3а5и5ь 4ам ег1 7ак5. П3и в4ем 23и э51м 6 кажд1г1 231изв1ди5еля ан5ив
и364н1г1
ПО имее54я и 4в1й а34енал на3аб151к в э51й 1бла45и, б6дь 51 3аз3аб15анные алг13и5мы
вн653и к1м2ании или ме51ды 21 641ве3шен45в1ванию 6же 46ще45в6ющих 5ехн1л1гий.

К3а5кий выв1д

Не 4м153я на к1л144альн1е к1личе45в1 6г31з в 5ак называем1й «
in

the

wild
», не 4м153я на
мн1же45в1 ан5иви364ных 231д6к51в, 23ед145авляющих ма446 23едл1жений 21 защи5е 15
в3ед1н14н1г1 ПО, к3ажи 2е341нальных данных и иных вид1в в513жения, 51льк1
к1нечный 21льз1ва5ель 123еделяе5 для 4ебя 451и5 ли ем6 21льз1ва5ь каким
-
либ1
231д
6к51м или же не5. К1нечн1 м1жн1 и4х1ди5ь из 51г1 ч51 12е3аци1нные 4и45емы
4емей45ва
Windows

н6ждаю54я в ан5иви364н1м ПО б1льше, чем 4и45емы
MacOS

да и
б1лее 51г1


UNIX
-
21д1бные ОС, н1 и 21льз6ю54я
Windows

21давляющее б1льшин45в1
21льз1ва5елей в ми3е. У5ве
3жда5ь, ч51
Linux

и
Mac

защищеннее
Windows

м1жн1 д1 5ех
213, 21ка их к1личе45в1 не 23евы4и5 к1личе45в1 21льз1ва5елей
Windows

и не 2131ди5
42314 на ви364ы именн1 21д э5и 4и45емы. «В1йна» межд6 ав513ами ви3641в и ав513ами
ан5иви364н1г1 ПО ник1гда не зак1нчи5
4я, и 4к13ее б6де5 двига5ь 5ехн1л1гиче4кий
231г3е44 в э51й 1бла45и как 4 1дн1й, 5ак и 4 д36г1й 45131ны.

11












С2и41к и421льз1ванных и451чник1в

1.

К1м2ью5е3ный ви364 // Ин5е3не5 3е4634


URL
:
http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8
E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D0%B9_%D0%B2%
D0%B8%D1
%80%D1%83%D1%81

2.

Elk

cloner

// Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/
Elk
_
Cloner

3.

Самые 12а4ные к1м2ью5е3ные ви364ы в и4513ии // Ин5е3не5 3е4634


URL
:
http://yablyk.com/monstry
-
mira
-
kompyuternyx
-
virusov
-
11
-
samyx
-
vydayushhixsya
-
zlovredov
-
v
-
istorii/

4.

С2и41к 46ще45в6ющих ан5иви3641в // Ин5е3не5 3е4634


URL
:

5.

ён5иви364ы. С5а5и45ика за IV ква35ал (Ок5яб3ь
-
Декаб3ь) R01S // Ин5е3не5 3е4634


URL
:
http://www.comss.ru/page.php?id=1760

6.

Дв1ичная 53
ан4ляция // Ин5е3не5 3е4634


URL
:
http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD
%
D0%B0%D1%8F_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%
8F%D1%86%D0%B8%D1%8F

7.

С3авнение 231д6к51в
Avast
A // Ин5е3не5 3е4634


URL
:
http
://
www
.
avast
.
ru
/
compare
-
antivirus

12


8.

Kaspersky Internet Security //
Ин5е3не5

3е4634



URL:
http://ru.wikipedia.org/wiki/Kaspersky_Internet_Security

9.

Comodo

Instant

SSL
-
4е35и7ика5ы // Ин5е3не5 3е4634


URL
:
http://comodorus.ru/ssl/detal/comodo_ssl/4

10.

О2и4ание 23еим6ще45в
Comodo

// Ин5е3не5 3е4634


URL
:
http
://
www
.
comodo
.
com
/
home
/
internet
-
security
/
free
-
interne
t
-
security
.
php

11.

П3еим6ще45ва выб13а Dr.Web // Ин5е3не5 3е4634


URL
:
http://products.drweb.com/win/security_space/?lng=ru

12.

В1зм1жн145и и 23еим6ще45ва
Panda

// Ин5е3не5 3е4634


URL
:
https
://
shop
.
pandasecurity
.
com
/
cgi
-
bin
/
pp
/
reg
=
RU
/
ml
=
RU
?
id
=
A
12
IS
14
ESD
&
track
=53699&
coupon
=302520
STDOFFE
R
&
nav
=
pp
_
homeuser
_
forWindows
_
A
12
IS
14
ESD

13.


NOD
SR // Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/
_
NOD
32

14.

О4н1вные в1зм1жн145и

Smart

Security

// Ин5е3не5 3е4634


URL
:
http
://
www
.
esetnod
32.
ru
/
home
/
products
/
smart
-
security
-
7/

15.

ён5иви364ная 231г3амма // Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/%
D
0%90%
D
0%
BD
%
D
1%82%
D
0%
B
8%
D
0%
B
2%
D
0%
B
8
%
D
1%80%
D
1%83%
D
1%81%
D
0%
BD
%
D
0%
B
0%
D
1%8
F
_%
D
0%
BF
%
D
1%80%
D
0%
BE
%
D
0%
B
3%
D
1%80%
D
0%
B
0%
D
0%
BC
%
D
0%
BC
%
D
0%
B
0

16.

Сигна563а а5аки // Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/%
D
0%
A
1%
D
0%
B
8%
D
0%
B
3%
D
0%
BD
%
D
0%
B
0%
D
1%8
2%
D
1%83%
D
1%80%
D
0%
B
0_%
D
0%
B
0%
D
1%82%
D
0%
B
0%
D
0%
BA
%
D
0%
B
8

17.

Сигна563ный 21и4к // Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/%
D
0%9
E
%
D
0%
B
1%
D
0%
BD
%
D
0%
B
0%
D
1%80%
D
1%83
%
D
0%
B
6%
D
0%
B
5%
D
0%
BD
%
D
0%
B
8%
D
0%
B
5,_%
D
0%
BE
%
D
1%81%
D
0%
BD
%
D
0
%
BE
%
D
0%
B
2%
D
0%
B
0%
D
0%
BD
%
D
0%
BD
%
D
0%
BE
%
D
0%
B
5_%
D
0%
BD
%
D
0%
B
0_%
D
1%81%
D
0%
B
8%
D
0%
B
3%
D
0%
BD
%
D
0%
B
0%
D
1%82%
D
1%83%
D
1%80%
D
0
%
B
0%
D
1%85

18.

П31ак5ивная защи5а // Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/%
D
0%9
F
%
D
1%80%
D
0%
BE
%
D
0%
B
0%
D
0%
BA
%
D
1%82
%
D
0%
B
8%
D
0%
B
2%
D
0%
BD
%
D
0%
B
0%
D
1%8
F
_%
D
0%
B
7%
D
0%
B
0%
D
1%89%
D
0
%
B
8%
D
1%82%
D
0%
B
0

19.

Эв3и45иче4кий анализ // Ин5е3не5 3е4634
-

URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/%
D
0%
AD
%
D
0%
B
2%
D
1%80%
D
0%
B
8%
D
1%81%
D
1%82
%
D
0%
B
8%
D
1%87%
D
0%
B
5%
D
1%81%
D
0%
BA
%
D
0%
BE
%
D
0%
B
5_%
D
1%81%
D
0%
13


BA
%
D
0%
B
0%
D
0%
BD
%
D
0%
B
8%
D
1%80%
D
0%
BE
%
D
0%
B
2%
D
0%
B
0%
D
0%
BD
%
D
0%
B
8%
D
0%
B
5

20.

Эм6ляция 231г3аммн1г1 к1да // Ин5е3не5 3е4634


URL
:
http://www.wasm.ru/wault/article/show/av_emul

21.

ёв51н1мная 5ехн1л1гия анализа 21ведения // Ин5е3не5 3е4634


URL:
http://www.viruslab.ru/products/tp/detail/analisis.php

22.

Sandboxing

// Ин5е3не5 3е4634


URL
:
http
://
ru
.
wikipedia
.
org
/
wiki
/
Sandbox




П3ак5иче4кая ча45ь

П145ан1вка и 3ешение задачи

П3ак5иче4кая ча45ь к6341в1й
3аб15ы 23ед21лагае5 на2и4ание 231г3аммы
, к1513ая
3еализ6е5 к3и251г3а7иче4кий 23151к1л из1б3аженный на 3и46нках 1 и R.
П31г3амма
д1лжна бы5ь вы21лнена 4 ин5е37ей41м к1мандн1й 4531ки. И4х1дные к1ды 3еализ1ваны
на языке
Java

7
и 23ив1дя54я в 23ил1жении 1.

Для 4имме53ичн1г1 ши731вания и421льз6ю54я
4лед6ющие алг13и5мы 41б45венн1й
3еализации: 2е3е45ан1в1чный, ши73 Цеза3я,
XOR
-
ши731вание. ё 5ак же 1дин из
алг13и5м1в из к3и251г3а7иче4к1й библи15еки
Bouncy

Castle
, к1513ый 21льз1ва5ель
м1же5 выб3а5ь 4ам1451я5ельн1.

Для 41здания ци731в1й 21д2и4и и421льз6е5
4я а44име53ичный алг13и5м
RSA
, 5ак же
41б45венн1й 3еализации.

В каче45ве хеш
-
76нкции и421льз6е54я
MD
5
, вычи4ление 3еализ6е54я 4 21м1щью
к3и251г3а7иче4к1й библи15еки

Bouncy

Castle
.


К3а5кие 5е13е5иче4кие 14н1вы 3аз3аба5ываем1й 5емы

Благ
1да3я 51м6, ч51
ши731вание

данных 146ще45вляе54я 4 2
1м1щью 4имме53ичных
алг13и5м1в, а а44име53ичным алг13и5м1м ши736ю54я ключи, 64к13яе54я 4к13145ь
3аб15ы 231г3аммы

Ши731вание ци731в1й 21д2и4и 3ек1менд6е54я 146ще45вля5ь ключ1м
RSA

би5н145ью не
ниже 10R4, 5ак как ключи ниж
е данн1й би5н145и 21две3жены взл1м6.

Данный к3и251г3а7иче4кий 23151к1л 3еализ6е5 надёжн1е ши731вание ин713мации, 5ак
как в 4л6чае её м1ди7икации мы 4м1жем 6зна5ь 1б э51м, благ1да3я 231ве3ке ци731в1й
21д2и4и.

14


К нед145а5кам м1жн1 15не45и баз1вый гене3а513 4л
6чайных чи4ел, как изве45н1, э51
6язвим145ь мн1гих алг13и5м1в ши731вания, а 5ак же а
лг13и5м MD5
, к1513ый

6язвим к
нек1513ым а5акам, на23име3 в1зм1жн1 41здание дв6х 411бщений 4 1динак1в1й хеш
-
46мм1й, 21э51м6 ег1 и421льз1вание

не 3ек1менд6е54я.


О2и4ание в4е
х 2
31г3аммн1 3еализ1ванных 76нкций


1.

BouncyCastleCipher

Вы21лняе5 ши731вание любым 4имме53ичным алг13и5м1м включенным в 4145ав
231вайде3а
BC
.

Ме51ды
encrypt
(),
decrypt
() вы21лняю5 к1ди31вание
\
дек1ди31вание 4115ве54ве5нн1.

Ме51д
setKey
()


645ан1вка ключа.
Гене3ация ключа 231и4х1ди5 в главн1м кла44е,
к1513ый б6де5 12и4ан ниже.

Так же е45ь 26бличная гл1бальная 2е3еменная
cipher
, к1513ая 21зв1ляе5 645ан1ви5ь
53еб6емый алг13и5м ши731вания.

2.

Cesar
.

Симме53ичный ши73 Цеза3я, ши731вание 231и4х1ди5 4двиг1м б6кв 21 а
л7ави56 на
123еделённый ключ.

Ме51ды
encrypt
(),
decrypt
() вы21лняю5 к1ди31вание
\
дек1ди31вание 4115ве54ве5нн1.

Ме51д
setKey
()


645ан1вка ключа. Ключ1м являе54я люб1е чи4л1 в ин5е3вале 15 0 д1 R6.

3.

XORchifer.

Реализ6е5 ши731вание 4 21м1щью 12е3ации 4л1жения
21 м1д6лю R.

Ме51ды
encrypt
(),
decrypt
() вы21лняю5 к1ди31вание
\
дек1ди31вание 4115ве54ве5нн1.

Ме51д
setKey
()


645ан1вка ключа. Ключ1м являе54я ма44ив чи4ел люб1й длины.

4.

Perestanovka.

Пе3е45ан1в1чный ши73, 465ь к15131г1 в 2е3е45авлении кажд1й 53е5ьей б6квы
ме45ами.

Ме51ды
encrypt
(),
decrypt
() вы21лняю5 к1ди31вание
\
дек1ди31вание 4115ве54ве5нн1.

У45ан1вка ключа для данн1г1 алг13и5ма не 53еб6е54я.

5.

Key.

Кла44 для 41здания ключа
RSA
. На вх1д 21даё54я значение 53еб6ем1й би5н145и, а на
вых1д 21л6чаем 2а36 ключей: 4
ек3е5ный и 15к3ы5ый.

6.

CipherRSA.

Кла44 3еализ6ющий ши731вание
RSA.

15


Ме51ды
encrypt
(),
decrypt
() вы21лняю5 к1ди31вание
\
дек1ди31вание 4115ве54ве5нн1, на
вх1д к1513ых д1лжны бы5ь 21даны за3анее 4713ми31ванные ключи.

7.

FileManager
.

О46ще45вляе5 за2и4ь и ч5ение
7айла.

Ме51д
WriteFile
() за2и4ывае5 бай5ы в 7айл, в 2а3аме53ы ме51да 2е3едаё54я ма44ив бай51в
и 265ь к 7айл6.

Ме51д
ReadFile
() 231изв1ди5 ч5ение бай51в из 7айла, в 2а3аме53ах ме51да 2е3едаё54я
265ь к 7айл6.

8.

Hash.

Кла44 3еализ6ющий вычи4ление хэш
-
76нкции.

П
14ле 41здания экзем2ля3а кла44а не1бх1дим1 вызва5ь ме51д
CreateHash
, в 2а3аме53е
к15131г1 2е3едаё54я значение
String
, 3ез6ль5а51м вы21лнения б6де5 вычи4ленная хэш
-
76нкция.

9.

KeyContainer.

Кла44 для 6д1бн1й 3аб15ы 4 ключами, 21зв1ляе5 1бъедини5ь в4е ключи в 1
дин 1бщий и
3азъедини5ь их назад.

П3и 41здании экзем2ля3а кла44 в 2а3аме53ы 1523авляю54я в4е ключи, 214ле чег1 м1жн1
вызва5ь 76нкцию
getAll
, к1513ая ве3нё5 1дин 1бъединённый ключ.

Для 3азъединения ключей, 4лед6е5 41зда5ь экзем2ля3 кла44а 4 1дним 1бщим ключ
1м,
214ле чег1 231из1йдё5 их ав51ма5иче4к1е 3азделение.

10.

MyArrayList.

С1б45венная 4536к563а данных, 3еализ6ющая динамиче4ки 3а4ши3яющий4я ма44ив.

11.

MyHashMap.

С1б45венная 4536к563а данных х3анящая 2а3ы ключ
-
значение.

12.

KeyInterface
,
CryptoInterface
,
CryptoInterfaceRSA
.

Ин5е37ей4ы выше12и4анных ме51д1в.

13.

MainClass.

Главный кла44, 1бъединяющий в4е выше12и4анные ме51ды и 3еализ6ющий
к3и251г3а7иче4кий 23151к1л.

В данн1м кла44е е45ь 76нкция 41здания 4имме53ичн1г1 ключа

generateSymmetricKey()

для к3и251г3а7и
че4к1й библи15еки
BouncyCastle
.

ё 5ак же ме51д
assemb
() и 76нкция
disassemb
(), 21зв1ляющие 1бъедини5ь и 3азъедини5ь
два ма44ива.

Ме51д
assemb
() 3аб15ае5 4лед6ющим 1б3аз1м: на вх1д 214562ае5 два ма44ива, 214ле чег1
вычи4ляе54я длина в5131г1 ма44ива, 5ак как

1на 1бычн1 меньше(ключи или хэш). Данная
длина, чаще в4ег1 б1лее R50, ч51 не 21ме45и54я в 1дин бай5, к1513ый 42141бен х3ани5ь
16


мак4имальн1е чи4л1 1R7. П1э51м6 вы4чи5ывае54я не1бх1дим1е чи4л1 бай5 для
41х3анения длины, а 1дин бай5 и421льз6е54я для х3анения
за21лненн1г1 чи4ла бай5.

П14ле чег1 за21лнение 231и4х1ди5 4лед6ющим 1б3аз1м: 2е3вый бай5


4к1льк1
4лед6ющих бай5 23146мми31ва5ь, ч51бы 21л6чи5ь длин6 в5131г1 ма44ива. П14лед6ющие
бай5 23ед45авляю5 41б1й 46мм6 длинны в5131г1 ма44ива. Далее ид65 2е3вый и в5
131й
ма44ивы.

Ф6нкция
disassemd
() 21зв1ляе5 3азъедини5ь ма44ивы. В 2а3аме53ах 2е3едаё54я 1бщий
ма44ив, а 5ак же 7лаг, к1513ый 6казывае5, как1й ма44ив не1бх1дим1 21л6чи5ь.
True

-

2е3вый.
False

-

в5131й.
Разъединение 146ще45вляе54я 4лед6ющим 1б3аз1м: 4чи5ыва
е54я
2е3вый бай5, в к15131м за2и4ан1 4к1льк1 214лед6ющих бай5 23146мми31ва5ь ч51бы
21л6чи5ь длин6 в5131г1 ма44ива. П14ле чег1 46мми36ю54я 214лед6ющие бай5ы и
вычи4ляе54я длина. На 14н1ве э51й длины 231и4х1ди5 3азделение бай51в и 4чи5ывание
ма44ив1в.

Р
6к1в1д45в1 21льз1ва5еля

Для ши731вания 7айла, не1бх1дим1 6каза5ь 265ь к 7айл6 в 2е3еменн6ю
source
. В
2е3еменн6ю
code

за2и4ывае54я 265ь к6да 21ме45и5ь заши731ванный 7айл. В 2е3еменн6ю
decode

21мещае54я 265ь для 3а4ши731ванн1г1 7айла.


Так же м1жн1 выб3а5ь
не1бх1димый алг13и5м 4имме53ичн1г1 ши731вания 4 21м1щью
библи15еки
Bouncy

Castle
, для э51г1 д145а51чн1 в 2е3еменн6ю
BCname

21ме45и5ь
название 53еб6ем1г1 алг13и5ма.

Е4ли не1бх1дим1 6величи5ь би5н145ь ключа
RSA
, не1бх1дим1 измени5ь значение
2а3аме53а 23и гене3ации ключа
myKey.genKey(128).


Заключение

В данн1й 3аб15е 21лн145ью 3еализ1ван 23151к1л, 12и4анный в задании к к6341в1м6
231ек56. В 231це44е 3аб15ы над э5им 23ил1жением были 21л6чены навыки и знания в
1бъек
5н1
-
13иен5и31ванн1м 231г3амми31вании и 23икладн1й к3и251г3а7ии, а 5акже в
1бла45и, 12и4анн1й в 5е13е5иче4к1й ча45и э51г1 231ек5а


С6ще45в6ющее ан5иви364н1е
231г3аммн1е 1бе42ечение.
П3инци2ы 3аб15ы ан5иви3641в
.







1
7











П3ил1жение 1


import

java.security.InvalidKeyException;

import

javax.crypto.BadPaddingException;

import

javax.crypto.Cipher;

import

javax.crypto.IllegalBlockSizeException;

import

javax.crypto.SecretKey;



public

class

BouncyCastleCipher
implements

CryptoInterface {



y
key
;


public

Cipher
cipher
;


byte

temp
[];




@Override


public

byte
[] encrypt(
byte
[] input)
throws

InvalidKeyException,
IllegalBlockSizeException, BadPaddingException


{



cipher
.init(Cipher.
ENCRYPT_MODE
,
key
);



temp

=
cipher
.doFinal(input);




temp
;


}



@Override


public

byte
[] decrypt(
byte
[] input)
throws

InvalidKeyException,
IllegalBlockSizeException, BadPaddingException


{



cipher
.init(Cipher.
DECRYPT_MODE
,
key
);



byte

temp[] =
cipher
.doFinal(input);




temp;


}



@Override


public

void

setKey(Object obj)


{



key

= (SecretKey)obj;


}

18




@Override


public

String getName() {




cipher
.getAlgorithm();


}


}



public

class

Cesar
implements

CryptoInterface {



int

key
;




@Override


public

byte
[] encrypt(
byte
[] input)


{



byte

temp[] =
new

byte
[input.
length
];



for
(
int

i=0; iinput.
length
; i++)



{




char

c = (
char
)input[i];








char

first=0;








if
�(c=
'a'

&& c=
'z'
)





first =
'a'
;




else

if
(c�=
'A'

&& c=
'Z'
)





first =
'A'
;








if
(first != 0)





c=(
char
)(first+(c
-
first+
key
+26)%26);








temp[i] = (
byte
)c;



}




temp;


}



@Override


public

byte
[] decrypt(
byte
[] input)


{



byte

temp[] =
new

byte
[input.
length
];



for
(
int

i=0; iinput.
length
; i++)



{




char

c = (
char
)input[i];








char

first=0;








if
�(c=
'a'

&& c=
'z'
)





first =
'a'
;




else

if
(c�=
'A'

&& c=
'Z'
)





first =
'A'
;








if
(first != 0)





c=(
char
)(first+(c
-
first
-
key
+26)%26);








temp[i] = (
byte
)c;



}




temp;


}



@Override

19



public

void

setKey(Object obj) {



key

= (
int
)obj;


}




@Override


public

String getName()


{




"Cesar"
;


}


}



package

org.mtuci.kur;


import

java.math.BigInteger;


public

class

CipherRSA
implements

CryptoInterfaceRSA

{


BigInteger
kodeMas
[];
//
для

хранения

кодированного

текста


BigInteger
dekodeMas
[];
//
для

хранения

декодированного

текста






@Override


public

void

encrypt(String text, String openKey)
//
кодируем


{



//
получаем

из

ключа

e и n



BigInteger e =
new

BigInteger(openKey.split(
"%"
)[0]);



BigInteger n =
new

BigInteger(openKey.split(
"%"
)[1]);






int

bitsN = n.bitCount();



int

bLng = text.length()*8 � bitsN ? bitsN/8
-
1 : text.length();
//
длина

блока
;
должна

быть

меньше

длины

текста
!



//System.out.println("
Длина

блока
: " + bLng);






int

L = text.length();



int

t =

L%bLng==0 ?
0 : bLng
-
L%bLng;
//
сколько

не

хватает

букв

до

полного

блока






for
(
int

i=0; it; i++)




text+=
"0"
;
//
дополняем

текст

нулями
,
если

не

подходит

для

блока






BigInteger byteMas[] =
new

BigInteger[text.length()/bLng+1];



kodeMas

=
new

BigInteger[text.length()/bLng+1];



byteMas[0]= BigInteger.
valueOf
(t);
//в
первый

байт

записываем

кол
-
во

нулей
,
чтобы

потом

их

удалить




int

j=1;



for
(
int

i=0; itext.length(); i+=bLng)



{




String txt =
"1"

+ text.substring(i, i+bLng);




//System.out.println("
Блок

" + j + ": " +
txt
);




byte

textByteMas[] = txt.getBytes();




byteMas[j++]=
new

BigInteger(textByteMas);



}




for
(
int

i=0; ibyteMas.
length
; i++)




kodeMas
[i]=byteMas[i].modPow(e, n);
//
кодируем

каждый

символ


}


20



@Override


public

void

decrypt(String text, String secretKey)
//
декодируем


{



String s[] = text.split(
"%"
);



dekodeMas

=
new

BigInteger[s.
length
];




//
получаем

из

ключа

d и n



BigInteger d =
new

BigInteger(secretKey.split(
"%"
)[0]);



BigInteger n =
new

BigInteger(secretKey.split(
"%"
)[1]);






for
(
int

i=0; is.
length
; i++)



{




BigInteger cur =
new

BigInteger(s[i], 16);
//
преобразуем

из

HEX




dekodeMas
[i]=cur.modPow(d, n);
//
декодируем



}


}




@Override


public

String getCodeText()


{



String output=
""
;



if
(
kodeMas
!=
null
);



{




for
(
int

i=0; i
kodeMas
.
length
; i++)





output+=
kodeMas
[i].toString(16)+
"%"
;
//
выводим

в

HEX



}




output;


}




@Override


public

String getDecodeText()


{



String output=
""
;



if
(
dekodeMas
!=
null
)



{




//
определим

кол
-
во

нулей

в
последнем

блоке




int

n =
dekodeMas
[0].intValue();








for
(
int

i=1; i
dekodeMas
.
length
; i++)




{





byte

mas[]=
dekodeMas
[i].toByteArray();





String temp =
new

String(mas);





temp = temp.substring(1, temp.length());
//
удаляем

первый

байт





output+=temp;




}








output = output.substring(0, output.length()
-
n);
//
выводим

без

нулей



}




output;


}


}



package

org.mtuci.kur;


import

java.security.InvalidKeyException;


21


import

javax.crypto.BadPaddingException;

import

javax.crypto.IllegalBlockSizeException;


public

interface

CryptoInterface

{


byte
[] encrypt(
byte
[] input)
throws

InvalidKeyException,
IllegalBlockSizeException, BadPaddingException;


byte
[] decrypt(
byte
[] input)
throws

InvalidKeyException,
IllegalBlockSizeException, BadPaddingException;


void

setKey (Object obj);



}


public

interface

CryptoInterfaceRSA

{


void

encrypt(String text, String openKey);
//
закодировать

открытым

ключом


void

decrypt(String text, String secretKey);
//
раскодировать

закрытым

ключом


//
получить

закодированный

текст


//
получить

открытый

текст

}


package

org.mtuci.kur;


import

java.io.ByteArrayOutputStream;

import

java.io.File;

import

java.io.FileInputStream;

import

java.io.FileOutputStream;

import

java.io.IOException;


public

class

FileManager

{



//
удаление

файла



public

static

void

DeleteFile(String nameFile)



{




File flt =
new

File(nameFile);




flt.delete();
//
удаляем



}






//
запись

в
файл



public

static

void

WriteFile(
byte
[] data, String name)
throws

IOException



{




FileOutputStream out =
new

FileOutputStream(name);




out.write(data);




out.close();



}






//
чтение

из

файла



public

static

byte
[] ReadFile(String fileName)
throws

IOException



{




FileInputStream input =
new

FileInputStream(fileName);




ByteArrayOutputStream baos =
new

ByteArrayOutputStream();








int

a=0;




while

((a=input.read()) !=
-
1)




{





baos.write(a);




}




input.close();

22










baos.toByteArray();



}

}


package

org.mtuci.kur;


import

java.math.BigInteger;

import

java.security.MessageDigest;

import

java.security.NoSuchAlgorithmException;


public

class

Hash

{


public

static

String CreateHash(String message)
throws

NoSuchAlgorithmException


{



MessageDigest hash = MessageDigest.
getInstance
(
"MD5"
);



byte
[] digest = hash.digest(message.getBytes());



BigInteger biHash3411Out =
new

BigInteger(digest);




biHash3411Out.toString();


}

}

package

org.mtuci.kur;


import

java.math.BigInteger;

import

java.util.Random;


public

class

Key
implements

KeyInterface

{




Random
rnd

=
new

Random();


BigInteger
n
;
//
модуль


BigInteger
e
;
//
открытая

экспонента


BigInteger
d
;
//
секретная

экспонента






@Override


public

void

genKey(
int

bits)


{



//
два

случайных

простых

числа

заданной

битности



BigInteger p =
createPrime
(bits);



BigInteger q =
createPrime
(bits);






n

= p.multiply(q);
//n=p*q



BigInteger m =
p.subtract(BigInteger.
ONE
).multiply(q.subtract(BigInteger.
ONE
));
//m=(p
-
1)*(q
-
1)






e

= BigInteger.
ZERO
;



while
(!
e
.gcd(m).equals(BigInteger.
ONE
))
//
вычисляем

взаимно

простое

число

e c m.
то

есть

с

одним

общим

делителем




e

=
new

BigInteger(bits,
rnd
);






d

=
e
.modInverse(m);
//
находим

секретную

экспоненту


}



//
возвращает

открытый

ключ


@Override


public

String getPublic()


{




e
.toString()+
"%"
+
n
.toString();

23



}



//
возвращает

закрытый

ключ


@Override


public

String getPrivate()


{




d
.toString()+
"%"
+
n
.toString();


}




//
для

создания

простого

числа

заданной

битности


private

static

BigInteger createPrime(
int

bits)


{



BigInteger p;



Random rnd =
new

Random();



do




{


p =
new

BigInteger(bits, rnd);


if

(p.mod(BigInteger.
valueOf
(2)).equals(BigInteger.
ZERO
))
continue
;




if

(p.mod(BigInteger.
valueOf
(3)).equals(BigInteger.
ZERO
))
continue
;




if

(p.mod(BigInteger.
valueOf
(5)).equals(BigInteger.
ZERO
))
continue
;




if

(p.mod(BigInteger.
valueOf
(7)).equals(BigInteger.
ZERO
))
continue
;


}



while

(!
miller_rabin
(p));
//
проверяем

по

тесту

Миллера
-
Рабина







p;


}






private

static

boolean

miller_rabin(BigInteger n)


{



Random rnd =
new

Random();



for

(
int

repeat = 0; repeat 20; repeat++)



{



BigInteger a;



do




{



a =
new

BigInteger(n.bitLength(), rnd);



}



while

(a.equals(BigInteger.
ZERO
));



if

(!
miller_rabin_pass
(a, n))



return

false
;



}



return

true
;


}



private

static

boolean

miller_rabin_pass(BigInteger a, BigInteger n)


{



BigInteger n_minus_one = n.subtract(BigInteger.
ONE
);



BigInteger d = n_minus_one;



int

s = d.getLowestSetBit();



d = d.shiftRight(s);



BigInteger a_to_power = a.modPow(d, n);



if

(a_to_power.equals(BigInteger.
ONE
))
return

true
;



for

(
int

i = 0; i s
-
1; i++) {



if

(a_to_power.equals(n_minus_one))

true
;



a_to_power = a_to_power.multiply(a_to_power).mod(n);



}



if

(a_to_power.equals(n_minus_one))
return

true
;



return

false
;


}


24


}



package

org.mtuci.kur;


public

class

KeyContainer

{


byte
[]
keyBC
;





//
ключ

для

баунси


int

keyXOR
[];





//
ключ

для

XOR


int

keyCes
;





//
ключ

для

цезаря




KeyContainer(
byte
[] BC,
int
[] XOR,
int

Cesar)


{



keyBC


= BC;



keyXOR


= XOR;



keyCes


=
Cesar;


}




KeyContainer(String key)


{



String s[] = key.split(
"##"
);






keyBC

= s[0].getBytes();






String tempXOR[] = s[1].split(
"~"
);



keyXOR

=
new

int
[tempXOR.
length
];



for
(
int

i=0; itempXOR.
length
; i++)




keyXOR
[i]=Integer.
parseInt
(tempXOR[i]);






keyCes

= Integer.
parseInt
(s[2]);


}






public

String getAll()


{



String tempXOR=
""
;



for
(
int

i=0; i
keyXOR
.
length
; i++)




tempXOR+=
keyXOR
[i]+
"~"
;



tempXOR = tempXOR.substring(0, tempXOR.length()
-
1);
//
убираем

послюднюю

запятую







new

String(
keyBC
) +
"##"

+ tempXOR +
"##"

+
keyCes
;


}

}



package

org.mtuci.kur;


public

interface

KeyInterface

{


void

genKey(
int

bits);
//
генерация

ключа


//
получить

публичный

ключ


//
получить

закрытый

ключ

}



package

org.mtuci.kur;

25



import

java.io.IOException;

import

java.security.InvalidKeyException;

import

java.security.NoSuchAlgorithmException;

import

java.security.NoSuchProviderException;

import

java.security.Security;


import

javax.crypto.BadPaddingException;

import

javax.crypto.Cipher;

import

javax.crypto.IllegalBlockSizeException;

import

javax.crypto.KeyGenerator;

import

javax.crypto.NoSuchPaddingException;

import

javax.crypto.SecretKey;

import

javax.crypto.spec.SecretKeySpe
c;




public

class

MainClass

{


static

String
source

=
"1.jpg"
;


static

String

code

=
"2.jpg"
;


static

String
decode

=
"3.jpg"
;




static

String
BCname

=
"AES"
;




public

static

SecretKey generateSymmetricKey(String algo)
throws

NoSuchAlgorithmException


{



KeyGenerator kg = KeyGenerator.
getInstance
(algo);




kg.generateKey();


}




public

static

byte
[] assemb(
byte

mas1[],
byte

mas2[])


{



int

len=mas2.
length
;



byte

count=0;



while
(len�Byte.
MAX_VALUE
)



{




len
-
=Byte.
MAX_VALUE
;




count++;



}



count++;






byte

temp[] =
new

byte
[mas1.
length

+ mas2.
length

+ count + 1];






temp[0]=count;



for
(
int

i=1; icount; i++)




temp[i]=Byte.
MAX_VALUE
;



temp[count]=(
byte
)len;






int

t=count+1;



for
(
int

i=0; imas1.
length
; i++)




temp[t++]=mas1[i];






for
(
int

i=0; imas2.
length
; i++)




temp[t++]=mas2[i];







temp;


}




public

static

byte
[] disassemb(
byte

all[],
boolean

data)

26



{



int

count=all[0];



int

len=0;



for
(
int

i=1; i=count; i++)




len+=all[i];






byte

mas[];






if
(data)



{




mas =
new

byte
[all.
length

-

len
-

count
-

1];




int

t=count+1;




for
(
int

i=0; imas.
length
; i++)





mas[i]=all[t++];



}



else



{




mas =
new

byte
[len];




int

t=all.
length
-
len;




for
(
int

i=0; imas.
length
; i++)





mas[i]=all[t++];



}







mas;


}




public

static

void

main(String[] args)
throws

NoSuchAlgorithmException,
IOException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException,
NoSuchProviderException, NoSuchPaddingException


{



Security.
addProvider
(
new

org.bouncycastle.jce.provider.BouncyCastleProvider());



byte
[] input = FileManager.
ReadFile
(
source
);






System.
out
.println(
"
Считано
: "

+
new

String(input));



System.
out
.println();









//1.
ВЫЧИСЛЯЕМ

ХЕШ

СООБЩЕНИЯ
:



String
hash = Hash.
CreateHash
(
new

String(input));



System.
out
.println(
"
Вычисленный

хэш
: "

+ hash);









//2. ПОДПИСЫВАЕМ ХЭШ ЗАКРЫТЫМ КЛЮЧОМ RSA:



Key myKey =
new

Key();



myKey.genKey(128);
//128
-

битность

ключа




//
открытый

ключ



//
закрытый

ключ






CipherRSA myCipher =
new

CipherRSA();



//
кодируем



//
получаем

закодированный

хэш



System.
out
.println(
"
Закодированный

хэш
: "

+ codeHash);



System.
out
.println();









//3. ДОБАВЛЯЕМ ЗАКОДИРОВАННЫЙ ХЭШ К ВХОДНЫМ ДАННЫМ:



byte
[] ByteHash = codeHash.getBytes();



byte
[] DataAndHash =
assemb
(input, ByteHash);



System.
out
.println(
"
Данные

и

хэш
: "

+
new

String(DataAndHash));




27







//4. КОДИРУЕМ СУММУ ТЕКСТА И ЗАШИФРОВННОГО ХЭША СИММЕТРИЧНЫМИ
АЛГОРИТМАМИ:



//
ключи
:



int

keyXOR[] = {1, 6, 7};







//
ключ

для

XOR



int

keyCes = 4;









//
ключ

для

цезаря



generateSymmetricKey
(
BCname
);

//
ключ

для

баунси






KeyContainer KC =
new





//
применяемые

симметричные

шифры



Perestanovka


per1 =
new

Perestanovka();



XORchifer




xor1 =
new

XORchifer();



Cesar





ces1 =
new

Cesar();



BouncyCastleCipher

BC1


=
new

BouncyCastleCipher();



//
добавить

из

баунси






//
установка

ключей



keyXOR
);

//
устанавливаем

ключ

XOR



keyCes
);


//
ключ

для

Цезаря






//
ключ

для

баунси



BC1.
cipher

= Cipher.
(
BCname
,
"BC"
);






CryptoInterface cryptoMas[] = {per1, xor1, ces1, BC1};
//
применяемые

шифры






//
кодируем



for
(CryptoInterface crypto : cryptoMas)



{




DataAndHash = crypto.encrypt(DataAndHash);




//System.out.println(crypto.getName() + ": " + new
String(DataAndHash));



}




System.
out
.println();



System.
out
.println(
"********************************************"
);



System.
out
.println(
"Code data and hash: "

+
new

String(DataAndHash));



System.
out
.println(
"********************************************"
);






//5. ШИФРУЕМ СИММЕТРИЧНЫЕ КЛЮЧИ С ПОМОЩЬЮ ОТКРЫТОГО КЛЮЧА RSA:






CipherRSA KeyCipher =
new

CipherRSA();



KeyCipher.encrypt(AllKey, openKey);
//
кодируем



String
codeAllKey = KeyCipher.getCodeText();



System.
out
.println(
"_____________________________________________"
);



System.
out
.println(
"
Зашифрованные

симметричные

ключи
: "

+ codeAllKey);



System.
out
.println(
"_____________________________________________"
);









//6. СОЗДАЁМ ЦИФРОВОЙ КОНВЕРТ ИЗ ЗАШИФРОВАННЫХ ДАННЫХ И КЛЮЧЕЙ:



byte

CifrCon[] =
assemb
(DataAndHash, codeAllKey.getBytes());









//7. ЗАПИСЫВАЕМ ЦИФРОВОЙ КОНВЕРТ В ФАЙЛ:



FileManager.
WriteFile
(CifrCon,
code
);






//****************************************************************************
***********

28




//****************************************************************************
***********






//
РАСШИФРОВКА
:



byte

CifrCon2[] = FileManager.
ReadFile
(
code
);



//
Извлекаем

ключи

и

данные



byte

DataAndHash2[] =
disassemb
(CifrCon2,
true
);



byte

ByteCodeAllKey2[] =
disassemb
(CifrCon2,
false
);






//1. ДЕКОДИРУЕМ СЕКРЕТНЫЕ КЛЮЧИ C ПОМОЩЬЮ СЕКРЕТНОГО КЛЮЧА RSA:



KeyCipher.decrypt(
new

String(ByteCodeAllKey2), secretKey);
//
декодируем

симметричные

ключи






System.
out
.println(
"____________________________________________"
);



System.
out
.println(
"
Расшифрованные

симметричные

ключи
: "

+
decodeAllKey);



System.
out
.println(
"____________________________________________"
);



System.
out
.println();






KeyContainer KC2 =
new

KeyContainer(decodeAllKey);




//
применяемые

симметричные

шифры



Perestanovka per2 =
new

Perestanovka();



XORchifer


xor2 =
new

XORchifer();



Cesar



ces2 =
new

Cesar();



BouncyCastleCipher

BC2


=
new

BouncyCastleCipher();






//
установка

ключей



keyXOR
);

//
устанавливаем

ключ

XOR



keyCes
);

//
ключ

для

Цезаря



new

SecretKeySpec(KC2.
keyBC
,
BCname
);






BC2.
cipher

= Cipher.
getInstance
(
BCname
,
"BC"
);






//2.
РАСШИФРОВЫВАЕМ

СИММЕТРИЧНЫМИ

КЛЮЧАМИ
:



CryptoInterface cryptoMas2[] = {per2, xor2, ces2, BC2};
//
применяемые

шифры






//
декодируем



for
(
int

i=cryptoMas2.
length
-
1; i�=0; i
--
)



{




CryptoInterface crypto = (CryptoInterface)cryptoMas2[i];




DataAndHash2 = crypto.decrypt(DataAndHash2);




//System.out.println(crypto.getName() + ": " + new
String(DataAndHash2));



}






System.
out
.println();



System.
out
.println(
"********************************************"
);



System.
out
.println(
"Decode data and hash: "

+
new

String(DataAndHash2));



System.
out
.println(
"********************************************"
);



System.
out
.println();






//3.
РАЗБИВАЕМ

ДАННЫЕ

И

ХЭШ
:



byte

input2[] =
disassemb
(DataAndHash2,
true
);



byte

ByteHash2[] =
disassemb
(DataAndHash2,
false
);






//4.
ДЕКОДИРУЕМ

ХЭШ

ОТКРЫТЫМ

КЛЮЧОМ
:



myCipher.decrypt(
new

String(ByteHash2), openKey);
//
декодируем

открытым

ключом

29







System.
out
.println(
"
Расшифрованный

хэш
: "

+ decodeHash);






String hash2 = Hash.
CreateHash
(
new

String(input2));



System.
out
.println(
"Вычисленный хэш принятого сообщения: "

+ hash2);



System.
out
.println(
"**********************************************************
***********************"
);



if
(hash2.equals(decodeHash))




System.
out
.println(
"
Хэш

совпадает
.
Сообщение не было изменено."
);



else




System.
out
.println(
"ВНИМАНИЕ! Хэш
изменён, возможно, сообщение
было модифицированно!"
);






System.
out
.println(
"
----------------------------------------------------
----------------------------
"
);



FileManager.
WriteFile
(input2,
decode
);



System.
out
.println(
"Данные записаны в файл "

+
decode
);


}

}



package

org.mtuci.kur;


import

java.util.Iterator;

import

java.util.NoSuchElementException;


public

class

myArrayListItem&#x-3I-;t-3;-3m;&#x-300;
implements

myArrayListInterfaceItemI-3;&#xt-3e;m-3;, IterableItemI-3;&#xt-3e;&#x-3m-; 
{




private

Item
mas
[];


private

int

tos
;




@SuppressWarnings
(
"unchecked"
)


myArrayList()


{



mas

= (Item[])(
new

Object[10]);



tos
=
-
1;


}



@SuppressWarnings
(
"unchecked"
)


@Override


public

void

add(Item item)


{



if
(
tos
==
mas
.
length
-
1)



{




Item temp[] = (Item[])(
new

Object[
mas
.
length
+10]);




for
(
int

t=0; t
mas
.
length
; t++) temp[t]=
mas
[t];




mas

= temp;




mas
[++
tos
]=item;



}



else




mas
[++
tos
]=item;


}



@Override


public

void

set(
int

index, Item item)


{



if
(index�
-
1 && index
mas
.
length
)




mas
[index]=item;

30



}



@Override


public

Item get(
int

index)


{



if
(index�length()
-
1 || index0)




throw

new

RuntimeException(
"
Ошибка
:
Индекс

выходит

за

границы
"
);



else





mas
[index];


}



@Override


public

int

length()


{



int

l=
mas
.
length
;



for
(
int

i=
mas
.
length
-
1; i�=
mas
.
length
-
10; i
--
)



{




if
(
mas
[i]==
null
) l=i;
else

{l=i+1;
break
;}



}







l;


}



@Override


public

void

remove(
int

index)


{



int

n = length();



if
(index�=0 && indexn)



{




for
(
int

i=index; in
-
1; i++)




{





mas
[i]=
mas
[i+1];
//
сдвигаем

все

значения




}




mas
[n
-
1]=
null
;
//
последний

зануляем



}


}




@SuppressWarnings
(
"unchecked"
)


@Override


public

void

setCapacity(
int

size)


{



mas

= (Item[])
new

Object[10+size];


}




@Override


public

String createString()


{



String output=
""
;



for
(
int

i=0; ilength(); i++)




output+=
mas
[i].toString();




output;


}




public

IteratorItem&#x-3I-;t-3;èm-;  iterator()


{




new

MyArrayListIterator();


}




private

class

MyArrayListIterator
implements

IteratorItem&#x-3I-;t-3;èm-; 


{


private

int

curIndex

= 0;

31





public

boolean

hasNext()


{




curIndex

!= length();


}




public

void

remove()


{



int

n = length();



if

(!hasNext())



throw

new

NoSuchElementException();



else




{





for
(
int

i=
curIndex
; in
-
1; i++)





{






mas
[i]=
mas
[i+1];
//
сдвигаем

все

значения





}





mas
[n
-
1]=
null
;
//
последний

зануляем




}


}



public

Item next()


{


if

(!hasNext())



throw

new

NoSuchElementException();




Item item =
mas
[
curIndex
];


curIndex
++;




return

item;


}


}


}



package

org.mtuci.kur;


public

interface

myArrayListInterfaceItem&#x-3I-;t-3;èm-; 

{


void

add(Item item);
//
добавляет

элемент


void

set(
int

index, Item item);
//
установка

значения

по

индексу


int

index);
//
получение

объекта

по

индексу


int

length();
//
получение

длины


void

remove(
int

index);
//
удаление

элемента


void

setCapacity(
int

size);
//
установка

вместимости

для

быстродействия

добавления


String createString();
//
создание

строки

из

элементов

}



package

org.mtuci.kur;


import

java.util.ArrayList;

import

java.util.Iterator;


public

class

myHashMap
Item

implements

myHashMapInterface
Item
�, Iterable
Item


{

32




ArrayList
Item

keyMas

=
new

ArrayList
Item
�();


ArrayList
Item

valueMas

=
new

ArrayList
Item
�();




@Override


public

void

put(
Item

key,
Item

value)


{



if
(
keyMas
.contains(key))



{




int

ind =
keyMas
.indexOf(key);




valueMas
.set(ind, value);



}



else



{




keyMas
.add(key);




valueMas
.add(value);



}


}



@Override


public

Item

get(
Item

key)


{



Item

o =
null
;



for
(
int

i=0; i
keyMas
.size(); i++)



{




if
(key.equals(
keyMas
.get(i)))




{





o=
valueMas
.get(i);





break
;




}



}







o;


}



@Override


public

Iterator
Item
� iterator() {







keyMas
.iterator();


}


}



package

org.mtuci.kur;


public

interface

myHashMapInterfaceItem&#x-3I-;t-3;-3m;&#x-300;

{


void

put(Item key, Item value);
//
добавить


//
получить

}



package

org.mtuci.kur;


public

class

Perestanovka
implements

CryptoInterface

{


33



@Override


public

byte
[] encrypt(
byte
[] new_s)


{



byte

temp[] =
new

byte
[new_s.
length
];



byte

c;






for
(
int

i=0; inew_s.
length
; i++)



{




if
(i%3==0 && (i+3)new_s.
length
)
//
если

делится

на

3
без

остатка




{







// и
не

выходим

за

границы

массива





c=new_s[i];
//
запоминаем

символ

на

i
-
ой

позиции





new_s[i] = new_s[i+3];
//
ставим

на

неё

i+3
-
ий

символ





new_s[i+3] = c;
//
на

i+3
ставим

то
,
что

запомнили




}



}



for
(
int

i=0; inew_s.
length
; i++)




temp[i]=new_s[i];




temp;


}



@Override


public

byte
[] decrypt(
byte
[] new_s)


{



byte

temp[] =
new

byte
[new_s.
length
];



byte

c;



for
(
int

i=new_s.
length
-
1; i�0; i
--
)
//
делаем

всё

тоже

самое



{








//
только

в
обратном

порядке




if
(i%3==0 && (i
-
3)�=0)




{





c=new_s[i];





new_s[i] = new_s[i
-
3];





new_s[i
-
3] = c;




}



}



for
(
int

i=0; inew_s.
length
; i++)




temp[i]=new_s[i];




temp;


}



@Override


public

void

setKey(Object obj)


{


}



@Override


public

String getName()


{




"Perestanovochnii"
;


}

}



package

org.mtuci.kur;


public

class

XORchifer
implements

CryptoInterface {



int

key
[];



34



@Override


public

byte
[] encrypt(
byte
[] input)


{



byte

temp[] =
new

byte
[input.
length
];



for
(
int

i = 0; i input.
length
; i++)


temp[i] = (
byte
)(input[i] ^
key
[i %
key
.
length
]);




temp;


}



@Override


public

byte
[] decrypt(
byte
[]
input)


{




encrypt(input);


}



@Override


public

void

setKey(Object obj)


{



key

= (
int
[])obj;


}




@Override


public

String getName()


{




"XOR"
;


}


}




Рез6ль5а5 вы21лнения 231г3аммы:




Приложенные файлы

  • pdf 7062342
    Размер файла: 953 kB Загрузок: 0

Добавить комментарий