Въведение в мрежовата сигурност / Network security basics

admin
Free
  • 2 lessons
  • 0 quizzes
  • 10 week duration

Въведение в криптографията. Използване на шифри със заместване и шифър на Цезар / Introduction to cryptography. Substitution ciphers and the Caesar cipher

Въведение в криптографията. Използване на шифри със заместване и шифър на Цезар.

1. Въведение

    Целта на това практическо упражнение е да се усвоят спецификите на шифрите със заместване и шифъра на Цезар. Студентите ще се запознаят с работната среда на програмния език Python и ще анализират готови програмни скриптове за прилагане на функции по шифриране и дешифриране на стрингове. Ще се разгледа принципа по шифриране и дешифриране на информацията с шифри със заместване и шифър на Цезар. Ще се проведе атака с изчерпателно претърсване на възможните комбинации за шифър на Цезар.

2. Цел на упражнението

    • Инсталиране на Python и запознаване с работната среда;
    • Стартиране на приложения скрипт за шифър със заместване и решаване на поставените задачи;
    • Стартиране на приложения скрипт за шифър на Цезар и решаване на поставените задачи;

3. Инсталиране на Python и запознаване с работната среда

    Изтеглете инсталационния файл на Python 2.7 и файловете Sub.py и Caesar.py. След изтегляне, стартирайте инсталационния файл python-2.7.3.exe и инсталирайте работната среда с настройките по подразбиране. Стартиране на Python в графичен режим и се запознайте с работната среда. От меню Start изберете All Programs > Python 2.7 > IDLE (Python GUI). След като работния екран на Python се зареди разгледайте менютата и възможностите, които ви се предоставят.
Introduction to cryptography. Substitution ciphers and the Caesar cipher.

1. Introduction

    The purpose of this practical exercise is to present to the students the specifics of the substitution ciphers and the Caesar cipher. The students will be introduced to the IDLE working environment, which is the primary environment for the Python programming language, and will analyse several programming scripts for implementation of string encryption and decryption functions. The principles of encrypting and decrypting information with substitution cyphers and with the Caesar cipher will be examined. An attack will be carried out with a thorough search of the possible combinations for the censor of Caesar.

2. Purpose of the exercise

    • Python install and introduction to the work environment;
    • Execution of the script for the substitution cipher and completion of presented tasks;
    • Execution of the script for the Caesar cipher and completion of presented tasks;

3. Python install and introduction to the working environment

    Download the installation file for Python 2.7 and files Sub.py and Caesar.py. After downloading the required files, execute file python-2.7.3.exe and install the work environment with default configuration. Start the Python GUI and get to know the working environment. From menu Start, choose All Programs > Python 2.7 > IDLE (Python GUI). When the IDLE environment is started, explore the environment and the menus.

4. Зареждане и анализ на скрипта на шифър със заместване

    Стъпка 1. – Заредете файла Sub.py. В него се съдържа програмен код, чрез който се прилага шифър със заместване. Анализирайте програмния код.

4. Loading, analysis and use of the script for the substitution cypher

    Step 1. – Load the Sub.py file. The file contains programing code, which is used for the implementation of the substitution cypher. Analyze the programing code.

    Както можете да видите, за реализирането на шифъра със заместване се използват няколко функции. Първата от тях – enc(word, dic), се използва за процеса по шифриране, като взема за входни параметри текст, дефиниран чрез променливата word и ключ, дефиниран от променливата dic. Резултатът от изпълнението на тази функция ще бъде прилагането на ключът върху текста, което ще доведе до неговото шифриране.
    def enc(word, dic):
    """
    Substitution encryption.
    """
    return "".join([dic[i] for i in word])

    Втората функция – dec(word, dic), се използва при процеса по дешифриране. Аналогично на първата функция се прилагат променливата word и dic, в които се съхраняват шифрираният текст и ключът за дешифрирането му.

    def dec(word, dic):
    """
    Substitution decryption.
    """
    dic_decryption = {}
    for i in dic:
    for j in dic:
    if dic[j] == i:
    dic_decryption[i] = j
    break
    return enc(word, dic_decryption)

    Резултатът от изпълнението на тази функция е дешифрирания текст. Както можете да видите по-долу в програмния код е самата дефиниция на ключа – променливата dic.

    dic = {'A':'X', 'B':'N', 'C':'Y', 'D':'A', 'E':'H', 'F':'P', 'G':'O', 'H':'G', \
    'I':'Z', 'J':'Q', 'K':'W', 'L':'B', 'M':'T', 'N':'S', 'O':'F', 'P':'L', \
    'Q':'R', 'R':'C', 'S':'V', 'T':'M', 'U':'U', 'V':'E', 'W':'K', 'X':'J', 'Y':'D', 'Z':'I', ' ':' '}

    Програмния код завършва с две изпълнения на процедурата print, за които като аргументи се използват функциите dec и enc.

    print enc("TEXTTEXT", dic);
    print dec("MHJMMHJM", dic);

    Стъпка 2. – Използване на програмния код на шифъра със заместване за шифриране и дешифриране на текст. За да използвате програмния код трябва да заместите във функцията print enc(“TEXTTEXT”, dic); TEXTTEXT с текста, който искате да се шифрира и аналогично в print dec(“MHJMMHJM”, dic); MHJMMHJM текста, който трябва да се дешифрира. Изпълнението на програмния код става с натискане на бутона F5.

    Дешифрирайте следните последователности:

    • TFAHCS YCDLMFOCXLGD ZV GHXEZBD NXVHA FS TXMGHTXMZYXB MGHFCD XSA YFTLUMHC VYZHSYH LCXYMZYH YCDLMFOCXLGZY XBOFCZMGTV XCH AHVZOSHA XCFUSA YFTLUMXMZFSXB GXCASHVV XVVUTLMZFSV TXWZSO VUYG XBOFCZMGTV GXCA MF NCHXW ZS LCXYMZYH ND XSD XAEHCVXCD ZM ZV MGHFCHMZYXBBD LFVVZNBH MF NCHXW VUYG X VDVMHT NUM ZM ZV ZSPHXVZNBH MF AF VF ND XSD WSFKS LCXYMZYXB THXSV
    • YFSOCXMUBXMZFSV DFU AZA ZM
    • TOIE TGQT IE XPUSNG GVDYABTGX

 

5. Зареждане и анализ на скрипта на шифър на Цезар

    Стъпка 1. – Заредете файла caesar.py. В него се съдържа програмен код, чрез който се прилага шифър на Цезар. Анализирайте програмния код.

    As you can see, the substitution cypher is realized using several functions. The first one – enc(word, dic), is used for the encryption process. The function uses as input a plain text message, which is defined in the variable word and a key, which is defined by the variable dic. The result of the execution of this function will lead to the encryption of the text using the key.
    def enc(word, dic):
    """
    Substitution encryption.
    """
    return "".join([dic[i] for i in word])

    The second function – dec(word, dic), is used for the decryption process. In the same way as with the enc(word, dic) function, this function uses the variables word and dic, which are used for the storing of the encrypted text (cipher text) and the key for its decryption.

    def dec(word, dic):
    """
    Substitution decryption.
    """
    dic_decryption = {}
    for i in dic:
    for j in dic:
    if dic[j] == i:
    dic_decryption[i] = j
    break
    return enc(word, dic_decryption)

    The result of the execution of the function is the deciphered text. As you can see below, the programing code contains the key – the variable dic.

    dic = {'A':'X', 'B':'N', 'C':'Y', 'D':'A', 'E':'H', 'F':'P', 'G':'O', 'H':'G', \
    'I':'Z', 'J':'Q', 'K':'W', 'L':'B', 'M':'T', 'N':'S', 'O':'F', 'P':'L', \
    'Q':'R', 'R':'C', 'S':'V', 'T':'M', 'U':'U', 'V':'E', 'W':'K', 'X':'J', 'Y':'D', 'Z':'I', ' ':' '}

    The programing code is finalized with two implementations of the print procedure, which are again using as arguments the functions dec and enc.

    print enc("TEXTTEXT", dic);
    print dec("MHJMMHJM", dic);

    Step 2. – Use of the programing code for the substitution cipher for encryption and decryption of text. To use the programing code you have to substitute the “TEXTTEXT” value in the function print enc(“TEXTTEXT”, dic); with the text, which you wish to encrypt and in the same way in the print dec(“MHJMMHJM”, dic); function you have to replace the “MHJMMHJM” text with the one, which you wish to decrypt. The execution of the programing code is done by pressing the F5 button of the keyboard.

    Decrypt the following encrypted messages:

    • TFAHCS YCDLMFOCXLGD ZV GHXEZBD NXVHA FS TXMGHTXMZYXB MGHFCD XSA YFTLUMHC VYZHSYH LCXYMZYH YCDLMFOCXLGZY XBOFCZMGTV XCH AHVZOSHA XCFUSA YFTLUMXMZFSXB GXCASHVV XVVUTLMZFSV TXWZSO VUYG XBOFCZMGTV GXCA MF NCHXW ZS LCXYMZYH ND XSD XAEHCVXCD ZM ZV MGHFCHMZYXBBD LFVVZNBH MF NCHXW VUYG X VDVMHT NUM ZM ZV ZSPHXVZNBH MF AF VF ND XSD WSFKS LCXYMZYXB THXSV
    • YFSOCXMUBXMZFSV DFU AZA ZM
    • TOIE TGQT IE XPUSNG GVDYABTGX

 



5. Loading, analysis and use of the script for the Caesar cypher

    Step 1. – Load the caesar.py file. It contains the programing code, which is used for the implementation of the Caesar cypher. Analyze the programing code.

    Както може да се види, за реализирането на шифъра със заместване се използват няколко функции. Първата от тях – encrypt(message, key), се използва за процеса по шифриране, като взема за входни параметри текст, дефиниран чрез променливата message и ключ, дефиниран от променливата key. Резултатът от изпълнението на тази функция ще бъде прилагането на ключът върху текста, което ще доведе до неговото шифриране.
    def encrypt(message, key):
    """
    Caesar encryption.
    """
    cipher = []
    for character in message.upper():
    if character.isalpha():
    cipher.append(chr((ord(character) + ord(key.upper())) % 26 + 65))
    else:
    cipher.append(character)
    return "".join(cipher)

    Дешифрирането на съобщенията се осъществява посредством функцията decrypt(cipher, key), която изисква две променливи – cipher, в която се съхранява шифрирания текст и key, която се зиползва за съхранение на ключа.

    def decrypt(cipher, key):
    """
    Caesar decryption.
    """
    message = []
    for character in cipher.upper():
    if character.isalpha():
    message.append(chr((ord (character) - ord(key.upper())) % 26 + 65))
    else:
    message.append(character)
    return "".join(message)

    Функциите encrypt(message, key) и decrypt(cipher, key) се прилагат с една стойност на променливата key, за да се гарантира правилното шифриране и дешифриране на съобщението. По подразбиране за класическия шифър на Цезар отместването е с 3 стойности, т.е. трябва да използвате „D“ като стойност за key. Въпреки това представения програмен код ви позволява да използвате за key и стойности различни от „D“. За да разберете колко е лесно да се разбие този шифър е създадена третата функция от програмния код – функцията bruteforce(); Тя се използва единствено и само с една променлива – cypher, която трябва да съдържа шифрираното съобщение. Идеята на тази функция е да изведе всички възможни комбинации по отместване на символите от шифрирания текст.

    def bruteforce(cypher):
    """
    Caesar brute force.
    """
    return "\n".join([str((chr(key + 65), decrypt(cypher, chr(key + 65)))) for key in range(26)])

    Стъпка 2. – Използване на програмния код на шифъра със заместване за шифриране и дешифриране на текст. За да използвате програмния код трябва да заместите във функцията print encrypt(“TESTTEXT”, “C”) TESTTEKST с текста, който искате да се шифрира и аналогично в print decrypt(“VGUVVGZV”, “C”) VGUVVGZV с текста, който трябва да се дешифрира. Използвайте една и съща стойност за параметъра key. При стойност „А“ символите от текста няма да се променят, При „В“ всички символи ще се преместят с една стойност на дясно (A->B, B->C, C->D и т.н.) и т.н. Изпълнението на програмния код става с натискане на бутона F5.

    Дешифрирайте следните последователности за ключ „N“:

    • GURRNEYV RFGSBEZFBSFRPERG JEVGVATERDHVE RQYVGGYRZBERGUNAY BPNYCRANAQCNC RENANYBTFNFZBF GCRBCYRPBHYQ ABGERNQ
    • PBATEN GHYNGVBAFL BHUNIRFHPPR FFSHYYLQ RPELCGR QGURZRF FNTR



    Дешифрирането на шифриран текст посредством ключът е детска игра. Следващите два примера са шифрирани, но ключът за тях няма да ви се предостави. Използвайте функцията bruteforce();, за да откриете ключът за двете съобщения.

    • OBXAF KDCOLJIBCQQL OFDEQVLRP ELRIAYBX YIBQLPBBQEBM IXFKQBUQJ BPPXDB
    • EZTVAFS



    Разменете си няколко шифрирани съобщения и ги разкодирайте. Не си предавайте ключовете, а използвайте функцията bruteforce();

    As you can see, the realisation of the cipher is done using several functions. The first of these functions is the encrypt(message, key) function, which is used for the encryption of the message. It uses as input a plain text message, which is defined using the variable message and a key, defined using the variable key. The result from the execution of this function will be the encryption of the message using the key.
    def encrypt(message, key):
    """
    Caesar encryption.
    """
    cipher = []
    for character in message.upper():
    if character.isalpha():
    cipher.append(chr((ord(character) + ord(key.upper())) % 26 + 65))
    else:
    cipher.append(character)
    return "".join(cipher)

    The decryption of the messages is completed using the function decrypt(cipher, key). This function is requiring two variables – cipher, which contains the encrypted text, and key, which is used for storing the key.

    def decrypt(cipher, key):
    """
    Caesar decryption.
    """
    message = []
    for character in cipher.upper():
    if character.isalpha():
    message.append(chr((ord (character) - ord(key.upper())) % 26 + 65))
    else:
    message.append(character)
    return "".join(message)

    The functions encrypt(message, key) and decrypt(cipher, key) use the same value for the variable key (symmetric encryption/decryption), which guarantees for the right encryption and decryption of the message. By default, the classic Caesar cypher is known as shift by 3, so the values will be shifted with 3 to the right, which means that you have to use „D“ as value for the variable key. Despite this, the program code and the definition of the encryption function allows you to change the values for the variable key, which will also alter the cipher and you will use a modification of the classic Caesar cypher. In order to understand how easy it is to break the Caesar cipher, you have access to another function – bruteforce(); This function uses only one variable – cypher, which must contain the encrypted message. The idea behind the function is to output on the screen all possible solutions by combining the encrypted message with all letters from the alphabet.

    def bruteforce(cypher):
    """
    Caesar brute force.
    """
    return "\n".join([str((chr(key + 65), decrypt(cypher, chr(key + 65)))) for key in range(26)])

    Step 2. – Encryption and decryption of messages using the program code. To use the program code, you have to replace the plain text message “TESTTEKST” in the function print encrypt(“TESTTEXT”, “C”) with the text, which you wish to encrypt. In the same way, you have to replace “VGUVVGZV” in the function print decrypt(“VGUVVGZV”, “C”) with the text, which you wish to decipher. Use the same value for the variable key. If you use the value „А“ for the key, there will be no change in the text. If you use „В“ for the key, all letters will be shifted with one value to the right (A->B, B->C, C->D, etc.). The execution of the programing code is done by pressing F5 on the keyboard.

    Decipher the following messages, which were encrypted with the key „N“:

    • GURRNEYVRFGSBEZF BSFRPERGJEVGVATER DHVERQYVGGYRZ BERGUNAYBPNYCRANAQCNCR ENANYBTFNFZBFG CRBCYRPBHYQ ABGERNQ
    • PBATENGHYNGV BAFLBHUNIRFHP PRFFSHYYLQRPELCGRQG URZRFFNTR



    Deciphering the message is very simple if you know the value for the key. The next two messages are encrypted using random key values. Use the bruteforce(); function to discover the keys for these two messages:

    • OBXAFKD COLJIBCQQLOFD EQVLRPELRIAYBX YIBQLPBBQEB MIXFKQBUQJBP PXDB
    • EZTVAFS



    Exchange few encrypted messages with your colleagues and try to decode them. Do not exchange any information about the keys. Use the bruteforce() function to “hack” the messages;