DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Лабораторна робота №4 з дисципліни «Проектування засобів захисту інформації в комп'ютерних системах та мережах»: Комбіновані криптосистеми на прикладі цифрового конверта

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2018
Тип роботи:
Лабораторна робота
Предмет:
Проектування засобів захисту інформації в комп’ютерних мережах
Група:
КН-31
Коротко про документ

Про що ця робота

У роботі розроблено програму підтримки комбінованих криптосистем на прикладі цифрового конверта. Наведено програмну реалізацію на мові Java з використанням шифрування та цифрового підпису.

У роботі розглядаються

  • Криптографічний захист інформації
  • Комбіновані криптосистеми
  • Цифровий конверт
  • Цифровий підпис
  • Програмна реалізація алгоритмів захисту
  • Архітектура програмного забезпечення

Зміст і розділи

  1. Мета
  2. Теоретичні відомості
  3. Завдання
  4. Текст програми
  5. Результат виконання програми
  6. Діаграма класів
  7. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів, які вивчають захист інформації в комп'ютерних мережах.
Викладачі:Морозов

Ключові поняття

криптосистемацифровий конвертцифровий підписсеансовий ключшифруваннягеш-функціяалгоритм RSAалгоритм CAST-128програмне забезпеченнязахист даних

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет „Львівська політехніка” Кафедра ЕОМ  Лабораторна робота №4 з дисципліни: “Проектування засобів захисту інформації в комп'ютерних системах та мережах” на тему: “Комбіновані криптосистеми на прикладі цифрового конверта” Львів 2017 Мета. Реалізувати програму підтримки комбінованих криптосистем на прикладі цифрового конверта. Теоретичні відомості. Сьогодні можна сміливо вважати, що якщо мова йде про передачу даних, то мається на увазі передача даних в комп'ютерних мережах або між локальними комп'ютерами. Тут в якості абонентського комплекту буде виступати комп'ютер, який будь-яким чином (безпосередньо через комп'ютерну мережу, через модем і стаціонарну телефонну мережу або через мобільний телефон) підключений до іншого комп'ютера (в разі широкомовних повідомлень - до інших комп'ютерів). Разом із завданням безпосереднього забезпечення захисту вмісту повідомлення від несанкціонованого доступу при передачі даних виникає задача підтвердження автентичності переданого повідомлення. Як для індивідуального, так і для корпоративного користувача найбільш прийнятні технології цифрового конверта і цифрового підпису у програмній реалізації. Суть технології цифрового конверта в наступному. Генерується унікальне число –сеансовий ключ. Упаковуння документа в цифровій конверт здійснюється шляхом обробки за певним алгоритмом, на вхід якого подаються як сам документ, так і сеансовий ключ. Вилучення документа з конверта можливо тільки при знанні сеансового ключ. Надалі технологія використання цифрового конверта визначається технологією керування сеансовоми ключами. Завдання. В ході роботи необхідно засвоїти основні принципи побудови комбінованих криптосистем, розробити програму підтримки комбінованих криптосистем на прикладі цифрового конверта. Для спрощення реалізації розрядність відкритого та закритого ключів повинна складати до 64 біт. Текст програми. package [ім’я автора приховано]; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigInteger; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; import javax.swing.SwingConstants; @SuppressWarnings("serial") public class DigEnv extends JFrame implements ActionListener { static String encrTextMes = "", digSign = ""; static BigInteger encrSesKey; static int size; JButton jButtonForm = new JButton("Form"); JButton jButtonVerify = new JButton("Verify"); JButton jButtonClear = new JButton("Reset"); JLabel jLabel1, jLabel2, jLabel3, jLabel4, jLabel5; static JLabel jLabel6; JLabel jLabel7; static JTextArea jTextMessage, jEncKey, jEncMes, jDigSig; @SuppressWarnings("deprecation") public DigEnv() { super("Digital envelope"); setSize(1070, 630); Container cc = getContentPane(); cc.setBackground(Color.green); jLabel1 = new JLabel("Digital envelope", SwingConstants.CENTER); jLabel1.setForeground(Color.BLACK); jLabel1.setFont(new Font("Arial", Font.PLAIN, 30)); jLabel1.setBounds(285, 15, 500, 50); cc.add(jLabel1); jLabel2 = new JLabel("Message"); jLabel2.setForeground(Color.BLACK); jLabel2.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel2.setBounds(30, 60, 500, 50); cc.add(jLabel2); jTextMessage = new JTextArea(10, 50); jTextMessage.setLineWrap(true); jTextMessage.setBounds(30, 100, 1000, 25); jTextMessage.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jTextMessage); jLabel3 = new JLabel("Encrypted session key"); jLabel3.setForeground(Color.BLACK); jLabel3.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel3.setBounds(30, 115, 500, 50); cc.add(jLabel3); jEncKey = new JTextArea(10, 50); jEncKey.setLineWrap(true); jEncKey.setBounds(30, 155, 1000, 100); jEncKey.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jEncKey); jLabel4 = new JLabel("Encrypted text message"); jLabel4.setForeground(Color.BLACK); jLabel4.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel4.setBounds(30, 245, 500, 50); cc.add(jLabel4); jEncMes = new JTextArea(10, 50); jEncMes.setLineWrap(true); jEncMes.setBounds(30, 285, 1000, 100); jEncMes.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jEncMes); jLabel5 = new JLabel("Digital signature"); jLabel5.setForeground(Color.BLACK); jLabel5.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel5.setBounds(30, 375, 500, 50); cc.add(jLabel5); jDigSig = new JTextArea(10, 50); jDigSig.setLineWrap(true); jDigSig.setBounds(30, 415, 1000, 100); jDigSig.setFont(new Font("Arial", Font.PLAIN, 20)); cc.add(jDigSig); jLabel6 = new JLabel(); jLabel6.setForeground(Color.BLACK); jLabel6.setFont(new Font("Arial", Font.PLAIN, 20)); jLabel6.setBounds(30, 505, 500, 50); cc.add(jLabel6); jButtonForm.setBounds(30, 545, 100, 30); cc.add(jButtonForm); jButtonVerify.setBounds(140, 545, 100, 30); cc.add(jButtonVerify); jButtonClear.setBounds(250, 545, 100, 30); cc.add(jButtonClear); jLabel7 = new JLabel(); cc.add(jLabel7); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jButtonForm.addActionListener(this); jButtonVerify.addActionListener(this); jButtonClear.addActionListener(this); show(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == jButtonForm) { formDigEnv(); } if (e.getSource() == jButtonVerify) { verifyDigEnv(); } if (e.getSource() == jButtonClear) { reset(); } } public static void main(String[] args) { new DigEnv(); } public static void verifyDigEnv() { BigInteger temp1 = new BigInteger(binaryToBigInteger(hexToBinary(digSign))); BigInteger temp2 = RSA.decryptPub(temp1); String hash1 = bigIntegerToHex(temp2); BigInteger temp3 = RSA.decryptPrv(encrSesKey); String sessionKey = bigIntegerToHex(temp3); String temp4 = CAST128.decr(encrTextMes, sessionKey); String openTextMessage = temp4.substring(0, size); String hash2 = SHA1.hash(openTextMessage).toUpperCase().substring(0, 40); System.out.println("Session key:\t" + sessionKey); System.out.println("Hash1:\t" + hash1); System.out.println("Open text message:\t" + openTextMessage); System.out.println("Hash2:\t" + hash2); if (hash1.equals(hash2)) { System.out.println("Check passed."); jLabel6.setText("Checked passed"); } else { System.out.println("Check not passed."); jLabel6.setText("Checked notpassed"); } } public static void formDigEnv() { String message = jTextMessage.getText(); byte[] key = LSFR(); RSA.generateKey(); size = message.length(); String hash = SHA1.hash(message).toUpperCase().substring(0, 40); String temp1 = bigIntegerToHex(new BigInteger(binaryToBigInteger(key))); encrTextMes = CAST128.encr(message, temp1); BigInteger temp2 = new BigInteger(binaryToBigInteger(key)); encrSesKey = RSA.encryptPub(temp2); BigInteger temp3 = new BigInteger(binaryToBigInteger(hexToBinary(hash))); BigInteger temp4 = RSA.encryptPrv(temp3); String temp5 = bigIntegerToHex(encrSesKey); digSign = bigIntegerToHex(temp4); System.out.println("Message:\t" + message); System.out.println("Hash:\t" + hash); System.out.println("Session key:\t" + bigIntegerToHex(new BigInteger(binaryToBigInteger(key)))); System.out.println("Encrypted session key:\t" + temp5); System.out.println("Encrypted text message:\t" + encrTextMes); System.out.println("Digital signature:\t" + digSign); System.out.println( "----------------------------------------------------------------------------------------------------------"); jEncKey.setText(temp5); jEncMes.setText(encrTextMes); jDigSig.setText(digSign); } public static void reset() { jLabel6.setText(""); jTextMessage.setText(""); jEncKey.setText(""); jEncMes.setText(""); jDigSig.setText(""); encrTextMes = ""; digSign = ""; encrSesKey = null; size = 0; } public static String bigIntegerToHex(BigInteger b) { String s = b.toString(10); BigInteger temp = new BigInteger(s, 10); return temp.toString(16).toUpperCase(); } public static byte[] hexToBinary(String s) { byte[] b = new byte[s.length() * 4]; String hex = s.toLowerCase(); for (int i = 0, j = hex.length() - 1; j >= 0; i += 4, j--) { if (hex.charAt(j) == '0') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '1') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '2') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '3') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 0; } if (hex.charAt(j) == '4') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '5') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '6') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '7') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 0; } if (hex.charAt(j) == '8') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == '9') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == 'a') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == 'b') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 0; b[i + 3] = 1; } if (hex.charAt(j) == 'c') { b[i] = 0; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 1; } if (hex.charAt(j) == 'd') { b[i] = 1; b[i + 1] = 0; b[i + 2] = 1; b[i + 3] = 1; } if (hex.charAt(j) == 'e') { b[i] = 0; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 1; } if (hex.charAt(j) == 'f') { b[i] = 1; b[i + 1] = 1; b[i + 2] = 1; b[i + 3] = 1; } } return b; } public static byte[] binaryToBigInteger(byte[] b) { int size = (b.length / 8) + 1; byte[] res = new byte[size]; for (int i = 0; i < size - 1; i++) { short n = 0; byte[] t = new byte[8]; for (int k = 0; k < 8; k++) t[k] = b[8 * i + k]; for (int j = 0; j < 8; j++) n += t[j] * Math.pow(2, j); res[size - 1 - i] = (byte) n; } res[0] = 0; return res; } public static byte[] LSFR() { byte[] arr = new byte[128]; for (int i = 0; i < 128; i++) arr[i] = 1; Random r = new Random(); int n = r.nextInt(128); while (n != 0) { byte temp = (byte) (arr[1] ^ arr[0]); for (int i = 0; i < 127; i++) { int j = i + 1; arr[i] = arr[j];} arr[127] = temp; n--; } return arr; } } Результат виконання програми:  Діаграма класів:  Висновок: На даній лабораторній роботі, я реалізувала програму підтримки комбінованих криптосистем на прикладі цифрового конверта.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!