Реферат Аналіз предметної області

Страница 1 из 2 | Следующая страница

>Реферат

Курсова робота містить 37 сторінки, 6 малюнків, 4 докладання, включаючидампи екрану й схеми і код докладання. Під час розробки використовувалося 10 джерел.

Основним об'єктом дослідження є проектуванняjava - докладання котрий використовує набір стандартних бібліотек (>JDKsecurity АПІ). Задля реалізації шифровки, дешифрування файлів, і навіть до створення та цифрового електронного підпису. Дані бібліотеки зараз широко використовують у більшості великих і потребують захисту додатків. Автор не висуває нових підходів до реалізації алгоритмів шифрування і оформленню програми. Основний наголос робиться на стабільність і надійність роботи програми. З погляду користувача ця програма має навчальний і комерційний характер.

Ключове слово:КРИПТОГРАФИЯ, АЛГОРИТМИ, ЦИФРОВАПОДПИСЬ, ПУБЛІЧНИЙ КЛЮЧ,JAVA,JDKSECURITY АПІ


Зміст

Запровадження

1. Аналіз предметної області

1.1 Опис завдання

>2.Реализация проекту

2.1 Реалізація цифровийподриси файлів

2.2 Реалізація алгоритмуDES для шифрування і розшифровки файла   

2.3 Запис ключів до класу з допомогоюсериализации

2.4 Стандартні діалогові вікна відкриття і збереження файла

3. Фундаментальна обізнаність із додатком

3.1Шифрование файла

3.2 Розшифровказакодированого файла

3.3 Творіння цифрового електронного підпису файла

3.4 Перевірка цифрового електронного підпису файла

Перелік посилань

Додаток А

Додаток Б

Додаток У

Додаток Р

 


 

Запровадження

>симметрический шифрування цифровий файл

Принаймні переходу від епохи індустріальної цивілізації до переважно інформаційної роль накопичених і відповідно опрацьованих знань помітно зростає. Поява і стрімкий розвиток комп'ютерних мереж забезпечило ефективні засоби передачі і швидкий доступом до інформації, як окремих людей, так великих організацій. Проте локальні й глобальні комп'ютерні мережі, втім, як й інші способи передачі, можуть становити загрозу безпеці даних, особливо за відсутності адекватних заходів його захисту від несанкціонованого доступу.

Отже, зараз, принаймні становлення інформаційного суспільства засоби захисту стають серед основних інструментів. Вони забезпечують конфіденційність, таємність, довіру, авторизацію, електронні платежі, корпоративну безпека продукції та незліченну кількість інших важливих атрибутів сучасного життя.

У зв'язку з цим наявність вбудованих механізмів захисту і ефективність його роботи в прикладних системах дедалі більше набуває визначальне значення під час виборів споживачами оптимального рішення. Тому даним питанням віддавна приділяють увагу розробники програмних засобів.Должний рівень захисту можуть забезпечити писав криптографічні методи.

Є кілька підходів до вирішення поставленого завдання.

По-перше, можна спробувати створити абсолютно надійний і недоступний іншим канал зв'язку. На жаль, домогтися цього дуже складно, по крайнього заходу, на існуючому рівні сучасного розвитку науку й техніки, які дають методи і засоби як передачі, а й несанкціонованого до неї доступу.

Другим підходом є використання загальнодоступних каналів зв'язку й приховання самого факту передачі будь-якої інформації. Згаданою напрямом займається наука стенографія. На жаль, методи стенографії що неспроможні гарантувати високий рівень конфіденційності інформації.

Третій спосіб — це використовувати загальнодоступний канал зв'язку, але передавати дані в перетвореному вигляді, те щоб відновити їх могла лише адресат. Розробкою методів перетворення інформації, які забезпечують її шифрування, й займається криптографія.

Слід зазначити, щокриптосистема працює за певної методології (процедурі).

Ця методологія передбачає використання:

однієї чи більш алгоритмів шифрування, які можна сформулювати як математичних формул;

ключів, використовуваних даними алгоритмами шифрування,

системи управління ключами,

незашифрованного тексту,

зашифрованого тексту (>шифртекста).


1. Аналіз предметної області

 

1.1 Опис завдання

У зв'язку з явною мережевий спрямованістю мови Java знадобилося приділити належну увагу засобам захисту. Передусім це теж стосується пересилки важливих даних між, наприклад, клієнтом і сервером, і навіть запуску програм чиапплетов. Такі кошти було розроблено й вмонтовані в набір стандартних бібліотек (>JDKsecurity АПІ).

Прикладом необхідність захисту може бути бажанняпользователя-получателя матимуть можливість верифікації, що дозволяє певні гарантії справжності документові чи коду.. Якподписиваемого об'єкта можуть виступатиапплети, які поширені з Інтернету. У результаті одержувача з'являється впевненість, що отримана саме з очікуваного відправника, а чи не можливого зловмисника, не була змінена у процесі пересилки. Задля більшої що така безпеки служать цифрові підпис сертифікати.

>Симметрическое шифрування - спосіб шифрування, у якому для (>за)шифрования ірасшифрования застосовується і той ж криптографічний ключ.

У цьому курсової роботі ми розглянемо реалізацію алгоритмусимметрического шифрування вjava з прикладу алгоритмуDES. І тільки створення, і перевірку цифрового електронного підпису алгоритмомDSA.


>2.Реализация проекту

 

2.1 Реалізація цифровийподриси файлів

Малюнок 2.1 – Схема дій при генерації підписи

Робота відправника

Генерація ключів

Програміст, не вдаючись у математичні формули й особливо реалізації, може використовувати вже доступні готові алгоритми й фізичні методи криптографії. Вони даються певними організаціями, так званими провайдерами (>provider). За умовчанням вбудовані кошти Java поставляє провайдер "SUN". Отже, єдине, що треба робити, це вказувати власне алгоритм і провайдера.

Передусім необхідно згенерувати пару ключів - publickey і privatekey. І тому використовується класKeyPairGenerator. Для отримання конкретного об'єкта цього необхідно викликатиstaticfactory методgetInstance(). Як аргументів передаються рядки із зазначенням алгоритму і провайдера. Наприклад, від використанняDSA (DigitalSignatureAlgorithm) і провайдера SUN необхідно писати:

>KeyPairGeneratorkeyGen =KeyPairGenerator.getInstance("DSA", "SUN");

У зв'язку з тим, більшість криптографічних алгоритмів є ймовірнісними, необхідно створитивероятностний джерело — об'єкт класуSecureRandom. У цьому є можливість використовувати різні методи, наприклад,SHA1PRNG (>pseudo-random-numbergenerationalgorithm).

>SecureRandomrandom =SecureRandom.getInstance("SHA1PRNG", "SUN");

Тепер потрібнопроинициализировать об'єктkeyGen, віддавши йому 2 параметра — довжину в бітах і джерело випадковості.

>keyGen.initialize(1024,random);

Останнім етапом є власне генерація пари ключів (методgenerateKeyPair()) і виділення двох окремих ключів (методиgetPrivate() іgetPublic()).

>KeyPairpair =keyGen.generateKeyPair();

>PrivateKeyprivKey =pair.getPrivate();

>PublicKeypubKey =pair.getPublic();

Створення підписи.

Передусім необхідно створити об'єкт класуSignature, викликавши методgetInstance():

>Signaturedsa =Signature.getInstance("SHA1withDSA", "SUN");

У разі використовується алгоритмDSA зSHA1 (>хеш-функция). Потім іде процес ініціалізації підписи ключем. Аналізуючи цей етап використовується закритий ключ, отриманий раніше:

>dsa.initSign(privKey);

Після цього потрібні звести підпис й існують самі дані. І тому викликається методupdate(), отримуваний як параметрабайтовий масив даних, що їх підписано.

На останньому етапі генерується сама підпис, яка представляється якбайтового масиву.

>byte[]realSig =dsa.sign();

Збереження підписи.

Після набуття підпис ключів необхідно зберегти їх, наприклад, в файл, та відправити адресата разом із вихідними даними. Слід сказати, що закритий ключ посилається, а в відправника.Отсилается ж відкритий ключ.

Отже, відправник посилає одержувачу, наприклад, електронною поштою чи через пряме мережне з'єднання такі файли:

1. Відкритий ключ (publickey)

2.Цифровую підпис (>digitalsignature)

3. Вихідні дані (підписаного документа чи код).

Малюнок 2.1 - Схема дій при верифікації підписи

Фундаментальна обізнаність із ключем: читання з файла і перетворення наPrivateKey.

Одержувач має послідовністю байт, які мають відкритий ключ. Необхідно отриматибайтовий масив (>Byte[]encKey), наприклад, прочитати ці дані з файла в масив, та був перетворити їх у об'єкт класуPublicKey.

І тому можна скористатися класомKeyFactory, котрий за специфікації ключа може відновити об'єкт класуKey (>PrivateKey іPublicKey є класуKey). Отже, необхідно одержати так звану специфікацію ключа. Її можна отримати роботу, виходячи з тому, який стандарт використовувався при генерації ключа. У разі ключ бувсгенерирован з допомогою провайдера "SUN", й тому він задовольняє стандартуX.509.

Генерація специфікації ключа (необхідний пакетjava.security.spec.*):

>X509EncodedKeySpecpubKeySpec = newX509EncodedKeySpec(encKey);

Створення об'єкта класуKeyFactory, відповідного цифрового електронного підпису і провайдеру "SUN".

>KeyFactorykeyFactory =KeyFactory.getInstance("DSA", "SUN");

Одержання об'єкта класуPublicKey

>PublicKeypubKey =keyFactory.generatePublic(pubKeySpec);

Фундаментальна обізнаність із підписом: читання з файла іSignature.

Підпис також потрібен перекласти набайтовий масив (>Byte[]sigToVerify). Потім необхідно створити об'єкт типуSignature, як і це робилося раніше.

>Signaturesig =Signature.getInstance("SHA1withDSA", "SUN");

>sig.initVerify(pubKey);

Під час читання необхідно застосовувати методupdate() об'єктаsig, аналогічно випадку створення підписи.

Перевірка дійсності (верифікація).

Завершальним етапом роботи одержувача є власне отримання відповіді питання правдивості підпис даних. З допомогою методуverify() об'єкта класуSignature можна було одержати результатомboolean:

>booleanverifies =sig.verify(sigToVerify);

Значення будеtrue, якщо дана підпис (>sigToVerify) справжня підпис для даних, за використанням відкритого ключа (>pubKey).

Слід зазначити, перший етап, пов'язані з роботою відправника, потребує деякого часу для генерації необхідні відправлення. Для комп'ютера класу Intel Pentium III із частотою 733 МГц час генерації становить приблизно 10 секунд. До речі, час, затрачуване для верифікації менше.

Крім розглянутоїDSA, надаються і ще кошти криптографічного захисту, якRSA,DES та інші. Їх використання подібно поданомуDSA.

 

2.2 Реалізація алгоритмуDES для шифрування і розшифровки файла

>Симметрическое шифрування - спосіб шифрування, у якому для (>за)шифрования ірасшифрования застосовується і той ж криптографічний ключ. Розглянемо реалізаціюсимметрического шифрування вjava з прикладу алгоритмуDES. Передусім нам знадобиться класjavax.crypto.Cipher, який реалізує базові функції популярних криптографічних алгоритмів шифрування. До сформування примірника такого класу використовується статистичний методCipher.getInstance , який на параметра отримує ім'я криптографічного алгоритму шифрування. У нашому випадку:

>Cipherchr =Cipher.getInstance("DES");

Таким кроком буде ініціалізація примірника класу тут і вказівку якому режимі працюватиме: як шифруванняchr.init(Cipher.ENCRYPT_MODE,key); - , чирасщифрования –

>chr.init(Cipher.DECRYPT_MODE,key);

Як бачимо, з'явився новийнеизвесний параметр:key - це 56 бітний ключ алгоритмуDES. Цей параметр має типjavax.crypto.SecretKey і може бути з допомогою класу:

>javax.crypto.KeyGenerator.SecretKeykey =KeyGenerator.getInstance("DES").generateKey();

>Шифрование чирасшифрование виконує функціяdoFinal класуCipher, а її вході отримуємасив байт і повертає такожмасив байт, але вже настав відповідно перетворених. Що саме (шифрування чирасшифрование) виконуватиме функція залежить тому, що булоуказанно у першому параметрі функції ініціалізаціїinit(). Отже з усього вище сказаного можна скомпонувати невеличкий клас. Клас для роботискриптографическим алгоритмом шифруванняDES. До класу додається функціяmain, у томучто-би перевірити правильність роботи створених функцій.

2.3 Запис ключів до класу з допомогоюсериализации

А, щоб об'єкт бувсериализуемим, клас цього об'єкта повинен реалізовувати інтерфейсjava.io.Serializable.

Інтерфейсjava.io.Serializable зовсім позбавлений методів і є маркером, який свідчить механізмусериализации у тому, що об'єкт, який реалізує даний інтерфейс, то, можливосериализован.

Тепер, коли вже сьогодні існують клас, який реалізує інтерфейсjava.io.Serializable, наступним кроком стане написання алгоритму, відповідального засериализацию примірника класуSecretKey.

2.4 Стандартні діалогові вікна відкриття і збереження файла

>Swing містить готове вікно для вибору файла (корисне, наприклад, для програмування пункту менюФайл --> Відкрити). Об'єкт класуJFileChooser створюється простим конструктором без параметрів, після що може виводитися на екран методомshowOpenDialog(). Цей метод повертає результат дій користувача за вибором файла, який порівнюється зі одній з наступних констант:

>APPROVE_OPTION — вибір файла пройшов успішно. Нині можна методомgetFile() отримати обраний файл.

>CANCEL_OPTION — користувач скасував вибір файла, клацнувши на кнопціCancel.

>ERROR_OPTION — під час виборів файла відбулася помилка, або користувач закрив діалогове вікно хрестиком.

МетодshowSaveDialog() відображає той самий вікно, але тепер він працює у режимі збереження. Користувач вибирає директорію задля збереження файла і може увести його ім'я. Метод повертає результат тієї самої типу, як іshowOpenDialog(). Якщо вибір шляхи до збереження пройшов успішно, виклик методуgetFile() повернуть шлях, куди користувач хоче зберегти файл.

Слід пам'ятати, що сама класJFileChooser щось відкриває і зберігає. Він лише повертає шлях до обраному користувачем файлу. А відкрити його зберегти файл в заданому місці повинна вже програма.

МетодsetDialogTitle(Stringtitle) дозволяє поставити вікна заголовок.


3. Фундаментальна обізнаність із додатком

 

3.1Шифрование файла

Для шифрування файла натиснути кнопку «>Зкодировать файл» головного меню програми (>Рис. 3.1), після чого відкриється стандартне діалогове вікно відкриття файла (>Рис. 3.2), у якому потрібно вибрати файл для шифрування. Після цього відкриється стандартне діалогове вікно задля збереження файлів (>Рис. 3.3), у якому необхідно вибрати місце розташування назви закодованої файла. Потім виникає ще одне діалогове вікно збереження файла зтребованьем йому вказати адресу збереження файла ключів. Після чого разі успішної шифровки файла за алгоритмомDES видається повідомлення типуMessageBox з повідомленням успішному кодуванняфайла(Рис 3.4).

Малюнок 3.1 – Головне вікно програми

Малюнок 3.2 –Стандартное діалогове вікно відкриття файла


Малюнок 3.3 –Стандартное діалогове вікно задля збереження файла

Малюнок 3.4 –Стандартное вікно повідомлення

 

3.2 Розшифровказакодированого файла

Для розшифровки закодованої файла необхідно вибрати у головному вікні програми (>Рис 3.1) пункт меню «розшифрувати файл». Після цього вказати: файл для розшифровки, адресу задля збереженнядекодированного файла, ключ шифрування. Після чого разі збіги ключа відбувається успішна розшифровка за адресою і виникає повідомлення з повідомленням про успішному завершенні, або про невідповідність файла ключів.

3.3 Творіння цифрового електронного підпису файла

До сформування цифрового електронного підпису файла необхідна за головному меню програми (>Рис. 3.1) вибрати пункт меню «Підписати файл». Після чого стандартному діалоговому вікні відкриття файла вказати шлях доподписиваемому файлу. Після цього виводитися повідомлення про успішному створенні цифрового електронного підпису й у директорії з цією файлом створюється файл з такою самою ім'ям і підвищення .>sig – це цифрова підпис і з розширенням .>pubkey – це публічний ключ для перевірки цифрового електронного підпису.

3.4 Перевірка цифрового електронного підпису файла

Для перевірки цифрового електронного підпису файла необхідна за головному меню програми (>Рис. 3.1) вибрати пункт меню «Перевірити цифрову підпис». Після цього необхідно вказати шлях допроверяемому файлу, шлях до файлу з цифровий підписом і файл з публічним ключем. Що стосується коректного вказівки всіх файлів і незмінностіпроверяемого файла видається повідомлення, що верифікація пройшла успішно. Коли б один біт у одному з цих файлів був модифікований, видається повідомлення про несанкціонованому доступі.

 


 

Перелік посилань

1. “Введення у криптографію” / Підобщ. ред.В.В.Ященко. —М.:МЦНМО, ”>ЧеРо”, 1998. —272c.

2. А.Нікітін, “Універсалістські писав криптографічні інтерфейси”, Захист інформації,Конфидент,N5, 1997.

3.М.Могран, “Java 2. Керівництво розробника”, Пер. з анг. :Уч. сел. — М.: “Вільямс”, 2000. —720c. : мул.

4.VipulVedPrakash,BenjaminTrott, “>AsymmetricCryptography inPerl”,O'Reilly, 2001.

5.R.Coleridge, “TheCryptography АПІ, orHow toKeep aSecret”,MSDN, 1996.

6.D.Esposito, “>SupportingCryptoAPI inReal-WorldApplications”,MSDN, 1997.

7.java.org

8.S.K.Parmar, “>Anintroduction tosecurity”,Fred Cohen &Associates, 2000.

9.R.L/Rivest,A.Shamir andL.Adleman, “Amethodforobtainingdigitalsignatures and publickeycryptosystems”.Commun.ACM,vol.21,p. 120-126, 1978.

10.W.Diffie andM.E.Hellman, “Newdirections incryptograpgy”, IEEETrans.Inf.Theory,vol.IT-22,N6,p.644-654,Nov. 1976.

11.A.Menezes,P.vanOorschot,S.Vanstone, “>Handbook ofappliedcryptography”,CRC Press, 1996.


Додаток А

Код класуmy_java_sec

publicclassmy_java_sec {

@>SuppressWarnings("deprecation")

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

>FInterfaceFormfif = newFInterfaceForm();

>fif.show();

}

}

 


 

Додаток Б

Код класуcoding_files

>importjava.io.FileInputStream;

>importjava.io.FileOutputStream;

>importjavax.crypto.Cipher;

>importjavax.crypto.KeyGenerator;

>importjavax.crypto.SecretKey;

publicclassCodingFiles {

>Cipherecipher;

>Cipherdcipher;

publicCodingFiles() {

//TODOAuto-generatedconstructorstub

}

publicSecretKeyinitCoding()

{

>try{

>SecretKeykey =KeyGenerator.getInstance("DES").generateKey();

>ecipher =Cipher.getInstance("DES");

>dcipher =Cipher.getInstance("DES");

>ecipher.init(Cipher.ENCRYPT_MODE,key);

>dcipher.init(Cipher.DECRYPT_MODE,key);

>returnkey;

}

>catch(Exception e)

{

}

>returnnull;

}

publicvoidiniCoding(SecretKeykey)

{

>try{

>ecipher =Cipher.getInstance("DES");

>dcipher =Cipher.getInstance("DES");

>ecipher.init(Cipher.ENCRYPT_MODE,key);

>dcipher.init(Cipher.DECRYPT_MODE,key);

}

>catch(Exception e)

{

}

}

publicbooleanfileEncode(Stringsourse,Stringresult)

{

>try{

>FileInputStreaminFile = newFileInputStream(sourse);

>intbytesAvailable =inFile.available();

>byte[]bytesReaded = newbyte[bytesAvailable];

>inFile.read(bytesReaded,0,bytesAvailable);

>inFile.close();

>byte[]br_enc =ecipher.doFinal(bytesReaded);

>FileOutputStreamoutFile = newFileOutputStream(result);

>outFile.write(br_enc);

>outFile.close();

>returntrue;

}

>catch(Exception e)

{}

>returnfalse;

}

publicbooleanfileDecode(Stringsourse,Stringresult)

{

>try{

>FileInputStreamenc_inFile = newFileInputStream(sourse);

>intenc_bytesAvailable =enc_inFile.available();

>byte[]enc_bytesReaded = newbyte[enc_bytesAvailable];

>enc_inFile.read(enc_bytesReaded,0,enc_bytesAvailable);

>enc_inFile.close();

>byte[]br_dec =>dcipher.doFinal(enc_bytesReaded);

>FileOutputStreamdec_outFile = newFileOutputStream(result);

>dec_outFile.write(br_dec);

>dec_outFile.close();

>returntrue;

}

>catch(Exception e)

{}

>returnfalse;

}

}

 


 

Додаток У

Код класуDigitalSignature

>importjava.io.BufferedInputStream;

>importjava.io.FileInputStream;

>importjava.io.FileOutputStream;

>importjava.security.KeyFactory;

>importjava.security.KeyPair;

>importjava.security.KeyPairGenerator;

>importjava.security.PrivateKey;

>importjava.security.PublicKey;

>importjava.security.SecureRandom;

>importjava.security.Signature;

>importjava.security.spec.X509EncodedKeySpec;

publicclassDigitalSignature {

publicstaticvoidsaveToFile (>byte[]info,Stringfilename) {

>try {

>FileOutputStreamfos = newFileOutputStream(filename);

>fos.write(info);

>fos.close();

}

>catch (>Exception e){}

}

publicstaticbyte[]readFromFile (>StringfileName) {

>byte[]info;

>try {

>FileInputStreamfis = newFileInputStream(fileName);

>info = newbyte[fis.available()];

>fis.read(info);

>fis.close();

}

>catch (>Exception e) {>info = newbyte[0];}

>return(info);

}

publicstaticbooleanCreateDigitalSignatureForFile(Stringputh)

{

>try

{

>KeyPairGeneratorkeyGen =KeyPairGenerator.getInstance("DSA", "SUN");

>SecureRandomrandom =SecureRandom.getInstance("SHA1PRNG", "SUN");

>keyGen.initialize(1024,random);

>KeyPairpair =keyGen.generateKeyPair();

>PrivateKeypriv =pair.getPrivate();

>PublicKeypub =pair.getPublic();

>Signaturedsa =Signature.getInstance("SHA1withDSA", "SUN");

>dsa.initSign(priv);

>FileInputStreamfis = newFileInputStream(puth);

>BufferedInputStreambufin = newBufferedInputStream(fis);

>byte[]buffer = newbyte[1024];

>intlen;

>while (>bufin.available() != 0)

{

>len =bufin.read(buffer);

>dsa.update(buffer, 0,len);

}

>bufin.close();

>byte[]realSig =dsa.sign();

>saveToFile (>realSig,puth+".sig");

>byte[]key =pub.getEncoded();

>saveToFile (>key,puth+".pubkey");

//>byte[]priv_key =priv.getEncoded();

//>saveToFile (>priv_key,"privkey_"+>puth);

>returntrue;

}

>catch (>Exception e){}

>returnfalse;

}

publicstaticbooleanTestedByDigitalSignature(Stringputh,Stringsign_puth,Stringpubkey_puth){

>try{

>byte[]encKey =readFromFile(pubkey_puth);

>X509EncodedKeySpecpubKeySpec = newX509EncodedKeySpec(encKey);

>KeyFactorykeyFactory =KeyFactory.getInstance("DSA", "SUN");

>PublicKeypubKey =keyFactory.generatePublic(pubKeySpec);

>byte[]sigToVerify =readFromFile(sign_puth);

>Signaturesig =Signature.getInstance("SHA1withDSA", "SUN");

>sig.initVerify(pubKey);

>FileInputStreamdatafis = newFileInputStream(puth);

>BufferedInputStreambufin

Страница 1 из 2 | Следующая страница

Схожі реферати:

Навігація