რა არის ფუნქცია hashing. კრიპტოგრაფიული hash ფუნქციები

ძიების ალგორითმები, რომლებიც, როგორც წესი, ეფუძნება აბსტრაქტულ შედარებას. ამ სერიიდან, "სიმბოლური ცხრილებისა და ორობითი ძებნის ხეების" განაწილების მეთოდი, რომელიც ინახება მაგიდის I-TH- ის პოზიციაში, რომელიც საშუალებას გაძლევთ პირდაპირ მიუთითოთ. ძიების დისტრიბუციისას, გასაღებები გამოიყენება როგორც მასივი ინდექსით და არა შედარების ოპერაციის ოპერაციებში; თავად მეთოდი ეფუძნება იმ ფაქტს, რომ გასაღებები სხვადასხვა რიცხვებით არის იგივე დიაპაზონი, როგორც მაგიდის ინდექსები. ამ თავში, ჩვენ შევხედავთ hashing (hashing) - გაფართოებულ ვერსია განაწილების ძებნა, გამოიყენება უფრო ტიპიური საძიებო განაცხადების, სადაც გასაღებები არ აქვს ასე მოსახერხებელი თვისებები. განაცხადის საბოლოო შედეგი Ეს მიდგომა აბსოლუტურად არ არის მსგავსი მეთოდები შედარებით შედარებით - ლექსიკონის მონაცემების სტრუქტურების საშუალებით, ელემენტებში ძირითადი ძიების ღილაკების მიხედვით, ჩვენ ვცდილობთ, რომ მაგიდაზე პირდაპირ მივმართოთ მაგიდაზე არითმეტიკული გასაღების კონვერტაციის საშუალებით.

ძებნა ალგორითმები გამოყენებით hashing შედგება ორი ცალკე ნაწილები. პირველი ნაბიჯი არის გამოთვლა hash ფუნქცია (hash ფუნქცია), რომელიც აკონვერტებს საძიებო გასაღები მაგიდასთან. იდეალურ შემთხვევაში, სხვადასხვა გასაღებები უნდა გამოჩნდეს სხვადასხვა მისამართებზე, მაგრამ ხშირად ორი ან მეტი სხვადასხვა გასაღებები შეიძლება იმავე მისამართზე მაგიდაზე. აქედან გამომდინარე, ჰაშინგების მეთოდის ძიების მეორე ნაწილი არის შეჯახების რეზოლუციის პროცესი (შეჯახების რეზოლუცია), რომელიც ამზადებს ისეთ გასაღებებს. ერთ-ერთ კონფლიქტმა რეზოლუციაში, რომელიც ჩვენ ამ თავში განვიხილავთ, დაკავშირებულია სიები, ამიტომ აღმოაჩენს დინამიურ სიტუაციებში პირდაპირი გამოყენებისას, როდესაც ძნელია წინასწარ განსაზღვროს ძებნის გასაღების რაოდენობა. შეჯახების რეზოლუციის სხვა ორი მეთოდით, მაღალ მიღწეული შესრულება ძიება, რადგან ელემენტები ინახება ფიქსირებული მასივი. ჩვენ განვიხილავთ ამ მეთოდების გაუმჯობესების მეთოდს, რომელიც საშუალებას გაძლევთ გამოიყენოთ ისინი და იმ შემთხვევებში, როდესაც შეუძლებელია მაგიდის ზომის პროგნოზირება.

Hashing არის კარგი მაგალითი ბალანსი შორის დრო და მეხსიერება. თუ მეხსიერების ოდენობის შეზღუდვა არ არსებობდა, ნებისმიერი ძებნა შეიძლება შესრულდეს მხოლოდ ერთი მეხსიერების ხელმისაწვდომობის გამოყენებით, უბრალოდ გამოიყენეთ გასაღები, როგორც მეხსიერების მისამართი, როგორც გავრცელების ძიება. თუმცა, ეს იდეალური შემთხვევა, როგორც წესი, მიუწვდომელია, რადგან გრძელი გასაღებები შეიძლება მოითხოვდეს უზარმაზარ მეხსიერებას. მეორეს მხრივ, თუ არ იყო შეზღუდვები წამყვანი დრო, შესაძლებელი იქნებოდა მინიმალური მეხსიერების გაკეთება, რიგითი ძიების მეთოდის გამოყენებით. Hashing არის გზა გამოიყენოს ორივე მეხსიერების და დრო, და მიღწევა ბალანსი ამ ორ უკიდურეს მოთხოვნებს. კერძოდ, თქვენ შეგიძლიათ მხარი დაუჭიროთ ნებისმიერ ბალანსს, უბრალოდ შეცვლის ზომის მაგიდასთან, და არ გადაწერეთ კოდი და სხვა ალგორითმების არჩევის გარეშე.

Hashing არის კომპიუტერული მეცნიერების ერთ-ერთი კლასიკური ამოცანა: მისი სხვადასხვა ალგორითმები დეტალურად არის შესწავლილი და ფართოდ გამოიყენება. ჩვენ ვნახავთ, რომ ყველა არ არის რთული ვარაუდები, თქვენ შეგიძლიათ იმედი მაქვს, რომ ოპერაციების მხარდაჭერა, რათა იპოვოთ და ჩასვით სიმბოლო მაგიდაზე მუდმივი შესრულების დროით, მიუხედავად იმისა, რომ მაგიდის ზომა.

ეს მოსალოდნელი ღირებულება არის თეორიული შესრულება ოპტიმალური სიმბოლოების ნებისმიერი განხორციელებისათვის, მაგრამ hash ჯერ კიდევ არ არის პანაცეა ორი ძირითადი მიზეზის გამო. პირველ რიგში, წამყვანი დრო დამოკიდებულია საკვანძო სიგრძეზე, რომელიც რეალურ აპლიკაციებში შეიძლება იყოს მნიშვნელოვანი გასაღებები. მეორე, hashing არ უზრუნველყოფს ეფექტური განხორციელება სხვა ოპერაციების სიმბოლო მაგიდები, როგორიცაა აირჩიოს ან დახარისხება. ამ თავში, დეტალურად განვიხილავთ ამ და სხვა კითხვებს.

Hash ფუნქცია

უპირველეს ყოვლისა, აუცილებელია გადაჭრას hash ფუნქციის გაანგარიშების ამოცანა, რომელიც აკონვერტებს გასაღებები მაგიდის მისამართზე. როგორც წესი, ამ არითმეტიკული გაანგარიშების განხორციელება არ წარმოადგენს სირთულეს, მაგრამ ჯერ კიდევ აუცილებელია დაიცვას ზრუნვა, ისე, რომ არ გადაეყარონ სხვადასხვა დაბალი რთული pitfalls. თუ არსებობს მაგიდა, რომელიც შეიძლება შეიცავდეს M ელემენტებს, საჭიროა ფუნქცია, რომელიც აკონვერტებს გასაღებები რიცხვებში. იდეალური hash ფუნქცია უნდა იყოს მარტივი გამოთვლა და იყოს შემთხვევითი ფუნქცია: ნებისმიერი არგუმენტი, შედეგები გრძნობა უნდა იყოს ექვივალენტი.

Hash ფუნქცია დამოკიდებულია ტიპის გასაღები. მკაცრად ლაპარაკი, ცალკე hash ფუნქცია მოითხოვს ცალკე ძირითად ტიპს. ეფექტურობის გაზრდისთვის, როგორც წესი, სასურველია, რათა თავიდან იქნას აცილებული ტიპების პირდაპირ კონვერტაციის თავიდან აცილება, რომელიც დაკავშირებულია მანქანების სიტყვის ორობითი პრეზენტაციის განხილვის იდეაზე, როგორც არითმეტიკული გათვლების გამოყენებისას. Hashing გამოჩნდა მაღალი დონის ენებზე - ადრეულ კომპიუტერებზე იყო ჩვეულებრივი საკითხი, რათა განიხილოს ნებისმიერი მნიშვნელობა, როგორც სიმებიანი გასაღები, როგორც მთელი რიცხვი. ზოგიერთ მაღალ დონეზე ენებზე, ძნელია შექმნას პროგრამები, რომლებიც დამოკიდებულია კონკრეტულ კომპიუტერში გასაღებების პრეზენტაციაზე, რადგან ასეთი პროგრამები არსებითად მანქანათმშია და, შესაბამისად, ისინი სხვა კომპიუტერზე გადადიან. როგორც წესი, hash ფუნქციები დამოკიდებულია ძირითადი კონვერტაციის პროცესში რიცხვებში, ამიტომ, ძნელია ერთდროულად უზრუნველყოს მანქანა დამოუკიდებლობისა და ეფექტურობის განხორციელების პროცესში. როგორც წესი, მარტივი რიცხვითი გასაღებები ან მცურავი პუნქტი ტიპის გასაღებები შეიძლება მოაქცია გამოყენებით მხოლოდ ერთი მანქანა ოპერაცია, მაგრამ სიმებიანი გასაღებები და სხვა სახის რთული გასაღებები მოითხოვს მაღალი ხარჯები და მეტი ყურადღება ეფექტურობა.

სავარაუდოდ, მარტივი სიტუაციაა, როდესაც გასაღებები არის ციფრები ერთად მცურავი წერტილი ფიქსირებული დიაპაზონი. მაგალითად, თუ გასაღებები ნომრები, დიდი 0 და პატარა 1, ეს შეიძლება უბრალოდ გამრავლდეს M, რაუნდი შედეგს მცირე რიცხვში და მიიღეთ მისამართი დიაპაზონში 0 და M - 1; ეს მაგალითი ნაჩვენებია ნახატზე. 14.1. იმ შემთხვევაში, თუ გასაღებები უფრო დიდია, ვიდრე t, ისინი შეიძლება მასშტაბური, გამოქვითვა s და გამყოფი on ts, რის შედეგადაც ისინი მოხვდება ღირებულებების შორის 0 და 1, და შემდეგ გამრავლების M და მიიღეთ მისამართი მაგიდაზე.


ნახაზი. 14.1.

ციფრული პუნქტით, 0-დან 1-მდე მაგიდის ინდექსების გადაკეტვის მიზნით, რომლის მიხედვითაც არის 97-ის ზომა, ამ ნომრებზე 97-ის გამრავლებით. ამ მაგალითში სამი კონფლიქტი მოხდა: 17, 53 და 76-ის ინდექსები. Hash ღირებულებები განისაზღვრება უხუცესთა საკვანძო ახორციელებს, უმცროსი განმუხტვა არ თამაშობს როლს. ჰარის ფუნქციის განვითარების ერთ-ერთი მიზანი არის ისეთი დისბალანსის აღმოფხვრა, რათა გაანგარიშების დროს გათვალისწინებული ყველა გამონადენი.

თუ გასაღებები არის w-bit integers, ისინი შეიძლება გარდაიქმნას მცურავი წერტილი ნომრები და გაყოფილი 2 W მისაღებად მცურავი წერტილი ნომრები დიაპაზონი შორის 0 და 1 შორის, ხოლო შემდეგ გამრავლების M, როგორც წინა პუნქტში. იმ შემთხვევაში, თუ მცურავი წერტილი ოპერაციები ბევრ დროს დაიკავებს, ხოლო ციფრები არ არის იმდენად მაღალი, რომ გამოიწვიოს overflow, იგივე შედეგი შეიძლება გამოყენებულ იქნას გამოყენებით მთელი არითმეტიკული ოპერაციების გამოყენებით: თქვენ უნდა გავამრავლოთ გასაღები M, და შემდეგ შეასრულოს ცვლა მარჯვენა whiparges 2 w (ან, თუ გამრავლება მივყავართ overflow, ცვლა, შემდეგ გამრავლება). ასეთი მეთოდები უსარგებლოა, თუ გასაღებები არ არის ერთნაირად გადანაწილებული სპექტრი, რადგან hash ღირებულება განისაზღვრება მხოლოდ წამყვანი ციფრი გასაღები.

უფრო მარტივი I. ეფექტური მეთოდი იყიდება W-Bit integers - ერთი ალბათ ყველაზე ხშირად გამოყენებული მეთოდები hashing - არჩევანი, როგორც ზომის m მაგიდის მარტივი ნომერი და გაანგარიშების ნარჩენებისგან მყოფი M, I.E. H (k) \u003d K MOD M ნებისმიერი რიცხვის გასაღები k. ეს ფუნქცია მოუწოდა მოდულური hash ფუნქცია. ძალიან ადვილია გამოვთვალოთ (C ++ C ++) და ეფექტურია, რომ მივაღწიოთ მცირე ზომის მნიშვნელობებს შორის ძირითადი მნიშვნელობების ერთიანობის მიღწევას. 14.2.


ნახაზი. 14.2.

სამი მარჯვენა სვეტში, მარცხნივ ნაჩვენები 7-ბიტიანი გასაღების შედეგი ნაჩვენებია შემდეგი ფუნქციების გამოყენებით:

v 97 (მარცხნივ)

v% 100 (ცენტრი) და

(int) (a * v)% 100 (მარჯვნივ),

სადაც \u003d .618033. ამ ფუნქციების მაგიდის ზომები შეესაბამება 97, 100 და 100. ღირებულებები შემთხვევითი (რადგან გასაღებები შემთხვევითი). მეორე ფუნქცია (V% 100) იყენებს მხოლოდ ორი ექსტრემალური მარჯვენა ღილაკით გასაღებები და ამიტომ არასასურველი გასაღებები შეიძლება აჩვენოს დაბალი შესრულება.

მოდულური hashing ვრცელდება მცურავი წერტილი გასაღებები. თუ გასაღებები მიეკუთვნება პატარა სპექტრს, ისინი შეიძლება გაიზარდოს ნომრებზე დიაპაზონში 0-დან 1-მდე, 2 ვ. კიდევ ერთი ვარიანტი უბრალოდ გამოიყენოთ მოდულური hash- ფუნქცია ორობითი ძირითადი პრეზენტაცია (თუ შესაძლებელია).

მოდულური hashing გამოიყენება ყველა შემთხვევაში, როდესაც ხელმისაწვდომობის ბიტი, საიდანაც გასაღებები შედგება, მიუხედავად იმისა, არიან თუ არა ისინი integers წარმოდგენილია მანქანა სიტყვა, თანმიმდევრობა სიმბოლოების შეფუთული მანქანა სიტყვა, ან წარმოდგენილია ნებისმიერი სხვა შესაძლო ვარიანტი. შემთხვევითი სიმბოლოების თანმიმდევრობა შეფუთული მანქანა სიტყვა არ არის ზუსტად იგივე, რაც შემთხვევითი რიცხვითი გასაღებები, რადგან არ ყველა discharges გამოიყენება კოდირების. მაგრამ ორივე ამ ტიპის (და სხვა ტიპის გასაღები კოდირებით, ისე, როგორც შესაფერისი მანქანა სიტყვა) შეიძლება გაკეთდეს, რათა გამოიყურებოდეს როგორც შემთხვევითი ინდექსები პატარა მაგიდაზე.

ძირითადი მიზეზი შერჩევა, როგორც ზომის m hash მაგიდა მარტივი რაოდენობით მოდულური hashing ნაჩვენებია ნახატზე. 14.3. ამ მაგალითში, სიმბოლური მონაცემები 7-ბიტიანი კოდით, გასაღები არის ინტერპრეტირებული როგორც ნომერი, რომელიც ბაზაზე 128 - ერთი ციფრი თითოეული ხასიათის გასაღები. ახლა სიტყვა შეესაბამება 1816567 ნომერს, რომელიც ასევე შეიძლება დაწეროს

მას შემდეგ, რაც ASCII კოდექსის სიმბოლოები N, O და W შეესაბამება ნომრებს 1568 \u003d 110, 1578 \u003d 111 და 1678 \u003d 119. ამ ტიპის გასაღების ცხრილის ზომა წარუმატებელი აღმოჩნდა, მას შემდეგ, რაც x ღირებულებების დამატება, მრავალჯერადი 64 (ან 128), არ შეცვლის x mod 64 - ნებისმიერი გასაღები, Hash ფუნქციის ღირებულებაა ამ გასაღების ბოლო 6 ციფრის ღირებულება. რა თქმა უნდა, კარგი hash ფუნქცია უნდა გაითვალისწინოს ყველა ძირითადი განმუხტვა, განსაკუთრებით სიმბოლური გასაღებები. მსგავსი სიტუაციები შეიძლება მოხდეს, როდესაც M შეიცავს მულტიპლიკატს, რომელიც არის ხარისხი 2. მარტივი გზა თავიდან აცილება ეს - აირჩიეთ როგორც M მარტივი ნომერი.


ნახაზი. 14.3.

ამ ცხრილის თითოეულ რიგში, თქვენ ხართ: 3-წერილი სიტყვა, ამ სიტყვის პრეზენტაცია ASCII კოდექსში, როგორც 21-ბიტიანი რიცხვი Octane და Decimal Formas და სტანდარტული მოდულური hash ფუნქციები მაგიდები 64 და 31 (ორი ექსტრემალური სვეტი მარჯვნივ). ცხრილის 64-ის ზომა მივყავართ არასასურველ შედეგებს, რადგან მხოლოდ უფლების ძირითადი განმუხტვის გამოყენება გამოიყენება hash ღირებულების მისაღებად, ხოლო ჩვეულებრივი ენის სიტყვებში წერილები არათანაბრად გადანაწილდება. მაგალითად, წერილში 0-ის ყველა სიტყვა შეესაბამება Hash ღირებულებას 57. და, პირიქით, 31-ის მარტივი ღირებულება მაგიდაზე ნაკლებია, ვიდრე ორჯერ უფრო მცირე.

მოდულური hashing ძალიან ადვილია განხორციელება, გარდა იმისა, რომ მაგიდის ზომა უნდა იყოს მარტივი ნომერი. ზოგიერთი განაცხადების, თქვენ შეიძლება იყოს შინაარსი პატარა ერთი ცნობილი მარტივი ნომერი ან ეძებს სიაში ცნობილი პრემიერ ციფრები ისეთი, რომელიც ახლოს არის სასურველი ზომა მაგიდა. მაგალითად, ნომრები 2 T - 1, მარტივია t \u003d 2, 3, 5, 7, 13, 17, 19 და 31 (და სხვა ღირებულებების გარეშე< 31 ): это известные простые числа Мерсенна. Чтобы динамически распределить таблицу нужного размера, нужно вычислить простое число, близкое к этому значению. Такое вычисление нетривиально (хотя для этого и существует остроумный алгоритм, который будет рассмотрен в части 5), поэтому на практике обычно используют таблицу заранее вычисленных значений (см. рис. 14.4). Использование модульного хеширования - не ერთადერთი მიზეზირომელზეც მაგიდის ზომა არის მარტივი რიცხვი; კიდევ ერთი მიზეზი ითვლება მე -14 მუხლში.


ნახაზი. 14.4.

ეს მაგიდა არის ყველაზე დიდი მარტივი ციფრები 2 N, რადგან შეიძლება გამოყენებულ იქნას დინამიური hash მაგიდის განაწილება, როდესაც აუცილებელია, რომ მაგიდის ზომა არის მარტივი ნომერი. ნებისმიერი დადებითი ღირებულება სპექტრი დაფარული, ეს მაგიდა შეიძლება გამოყენებულ იქნას, რათა დადგინდეს მარტივი რიცხვი, რომელიც განსხვავდება მასზე ნაკლები 2-ჯერ.

კიდევ ერთი განსახიერება მთელი რიცხვითი გასაღებები არის კომბინაცია მულტიპლიკაციური და მოდულური მეთოდები: თქვენ უნდა გავამრავლოთ გასაღები მუდმივი დიაპაზონი შორის 0 და 1 შორის, შემდეგ კი გაყოფა მოდულის M. სხვა სიტყვებით, თქვენ უნდა გამოიყენოთ ფუნქცია. მნიშვნელობებს შორის, მ და ძირითადი ნომრის სისტემის ეფექტური ბაზა, არსებობს ურთიერთობა, რომელიც თეორიულად შეიძლება გამოიწვიოს ანომალური ქცევა, მაგრამ თუ იყენებთ თვითნებურ ღირებულებას რეალური დანართი ნაკლებად სავარაუდოა, რომ პრობლემა არ არის. ხშირად, როგორც, ღირებულება f \u003d 0.618033 ... (ოქროს სექცია) შერჩეულია.

ამ თემას ბევრი სხვა ვარიაცია შესწავლილია, კერძოდ, hash ფუნქციები, რომელიც შეიძლება განხორციელდეს ასეთი ეფექტური მანქანების ინსტრუქციების გამოყენებით, როგორიცაა ცვლა და ნიღაბი შერჩევა (იხ. ბმულები).

ბევრ აპლიკაციებში, რომლებიც სიმბოლური მაგიდები იყენებენ, გასაღებები არ არის ნომრები და არ არის აუცილებელი მოკლე; უფრო ხშირად ალფანუმერული ხაზები, რომლებიც ძალიან გრძელია. კარგად, თუ როგორ უნდა გამოვთვალოთ hash ფუნქცია სიტყვა, როგორც Averyllongkey?

7 ბიტიანი ASCII კოდექსში, ეს სიტყვა შეესაბამება 84-ბიტიან ნომერს \\ დაწყებას (align *) 97 \\ cdot 128 ^ (11) & + 118 \\ cdot 128 ^ (10) + 101 \\ cdot 128 ^ (9) + 114 \\ cdot 128 ^ (8) + 121 \\ cdot 128 ^ (7) \\\\ & + 108 \\ cdot 128 ^ (6) + 111 \\ cdot 128 ^ (5) + 110 \\ cdot 128 ^ (4) + 103 \\ Cdot 128 ^ (3) \\\\ & + 107 \\ cdot 128 ^ (2) + 101 \\ cdot 128 ^ (1) + 121 \\ cdot 128 ^ (0), \\ END (გასწორება *),

რაც ძალიან დიდია, რომ ჩვეულებრივი არითმეტიკული ფუნქციები მასთან შედარებით უმეტეს კომპიუტერებში შეიძლება შესრულდეს. და ხშირად საჭიროა გაუმკლავდეს და გაცილებით მეტი გასაღებები.

გაანგარიშების მოდულური hash ფუნქცია ხანგრძლივი გასაღებები, ისინი გარდაიქმნება ფრაგმენტი თითო ფრაგმენტი. თქვენ შეგიძლიათ გამოიყენოთ მოდულის ფუნქციის არითმეტიკული თვისებები და გამოიყენოთ Gorner ალგორითმი (იხ. ნაწილი 4.9 "აბსტრაქტული მონაცემთა ტიპები"). ეს მეთოდი ეფუძნება გასაღების ნომრების სხვა მეთოდს. მაგალითისთვის, ჩვენ ვწერთ: \\\\ დაწყების (((((((((((((((((((((((11) ^ (11) & + 118) \\ cdot 128 ^ (10) + 101) \\ Cdot 128 ^ (9) + 114) \\ cdot 128 ^ (8) + 121) \\ cdot 128 ^ (7) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + 110) \\ cdot 128 ^ (4) + 103) \\ cdot 128 ^ (3) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ *)

ანუ, სიმებიანი კოდირების შესაბამისი ათობითი რიცხვი შეიძლება გამოითვალოს, როდესაც ის მარცხნიდან მარჯვნივ, 128-მდე დაგროვილი ღირებულების გამრავლებით და შემდეგ მომდევნო სიმბოლოების კოდექსის ღირებულებას. ხანგრძლივი სიმებიანი შემთხვევაში, გაანგარიშების ეს მეთოდი საბოლოოდ გამოიწვევს იმას, რაც კომპიუტერში ყველაფერს წარმოადგენს. თუმცა, ეს რიცხვი არ არის აუცილებელი, რადგან მხოლოდ (მცირე) ნარჩენი საჭიროა M.- ს გაყოფისგან, რაც შეიძლება მიღებული იყოს დაგროვილი ღირებულების დაცვით, რადგან ნებისმიერ დროს, გაანგარიშება შეიძლება გაუქმდეს მრავალჯერ M - ყოველ ჯერზე თქვენ ასრულებთ გამრავლებას და დამატებით, აუცილებელია მხოლოდ სამმართველოს მოდულის მდინარის ნარჩენების შესანახად, რაც შედეგი იქნება იგივე, თითქოს ჩვენ გვქონდა გამოთვლა ხანგრძლივი რიცხვი და შემდეგ შეასრულოს განყოფილება (იხ. exercise 14.10). ეს დაკვირვება ხელმძღვანელობს პირდაპირი არითმეტიკული მეთოდით მოდულური hash ფუნქციების გაანგარიშებისათვის ხანგრძლივი ხაზებისათვის - იხილეთ პროგრამა 14.1. ეს პროგრამა იყენებს სხვა, ბოლო კვანძი: ბაზის ნაცვლად 128, იგი იყენებს მარტივი ნომერი 127. ამ ცვლილების მიზეზი განიხილება მომდევნო პუნქტში.

არსებობს მრავალი გზა, რომ გაანგარიშება hash ფუნქციები დაახლოებით იგივე ხარჯები, როგორც მოდულური hashing გამოყენებით gorner მეთოდი (ერთი ან ორი არითმეტიკული ოპერაციები თითოეული სიმბოლო გასაღებისათვის). შემთხვევითი გასაღებები, ეს მეთოდები პრაქტიკულად არ განსხვავდება ერთმანეთისგან, მაგრამ რეალური გასაღებები იშვიათად შემთხვევითია. დაბალი ხარჯების ღირებულების შესაძლებლობა, რეალური გასაღებები შემთხვევითი ტიპისთვის მივყავართ რანდომიზებული ალგორითმების განხილვისას, რადგან ჩვენ გვჭირდება hash ფუნქციები, რომლებიც ქმნიან შემთხვევითი მაგიდის ინდექსებს, მიუხედავად საკვანძო განაწილების მიუხედავად. არ არის ძნელია ორგანიზება რანდომიზაციის, რადგან არ არის აუცილებელი სიტყვასიტყვით დაიცვას განმარტება მოდულური hashing - აუცილებელია მხოლოდ გამოთვლა მთელი რიცხვი მცირე მ, ყველა ძირითადი განმუხტვა იყო გამოყენებული.

M \u003d 96 და A \u003d 128 (ზედა)

M \u003d 97 და A \u003d 128 (ცენტრი) და

M \u003d 96 და A \u003d 127 (ქვემოთ)

პირველ შემთხვევაში არათანაბარი განაწილება არის წერილების არათანაბარი გამოყენების შედეგი და არათანმიმდევრული გამოყენების შედეგია იმის გამო, რომ მაგიდის ზომა და მულტიპლიკატორის მულტიპლიკატორი 32. ორი სხვა მაგალითი გამოიყურება შემთხვევით, რადგან მაგიდის ზომა და მულტიპლიკატორი ორმხრივად მარტივი ნომრები.

პროგრამა 14.1 გვიჩვენებს ერთ-ერთ გზას: მარტივი ბაზის გამოყენებით ნაცვლად ხარისხი 2 და რიცხვი, რომელიც შეესაბამება ASCII- ს წარმომადგენლობას სიმებიანი. ფიგურაში 14.5 ნახაზი. 14.5 ნაჩვენებია, თუ როგორ ამ ცვლილებებს აუმჯობესებს ტიპიური სიმებიანი გასაღებების განაწილებას. პროგრამის მიერ შექმნილი თეორიულად hash ღირებულებები 14.1 შეიძლება მისცეს ცუდი შედეგების მაგიდა ზომის, რომლებიც მრავალჯერადი 127 (თუმცა პრაქტიკაში სავარაუდოდ თითქმის imperceptible); რანდომიზებული ალგორითმის შესაქმნელად, შესაძლებელი იქნებოდა შერჩევა მულტიპლიკატორის ღირებულების შემთხვევით. კიდევ უფრო ეფექტური მიდგომა არის თითოეული ძირითადი ნომრის გაანგარიშებისა და სხვადასხვა შემთხვევითი ღირებულებების კოეფიციენტების შემთხვევითი ღირებულებების გამოყენება. ეს მიდგომა აძლევს რანდომიზებულ ალგორითმს, რომელსაც უწოდებენ უნივერსალურ ჰაშინგს (უნივერსალური ჰაშინგი).

თეორიულად, იდეალური უნივერსალური Hash ფუნქცია ფუნქციაა, რისთვისაც ორი განსხვავებული გასაღების შეჯახების ალბათობა განზომილებით M არის ზუსტად 1 / მ. ეს შეიძლება დადასტურდეს, რომ პროგრამაში კოეფიციენტის გამოყენება 14.1 არ არის ფიქსირებული თვითნებური ღირებულება და შემთხვევითი სხვადასხვა ღირებულებების თანმიმდევრობა მოდულური ჰეშტრის ფუნქციაში გადადის. თუმცა, ყოველ სიმბოლოში თითოეული სიმბოლოების ახალი შემთხვევითი რიცხვის გენერირების ღირებულება, როგორც წესი, მიუღებელია. პრაქტიკაში, შესაძლებელია პროგრამის 14.1-ში ნაჩვენები კომპრომისის მისაღწევად, თითოეული ძირითადი სიმბოლოთათვის სხვადასხვა შემთხვევითი ნომრების მასივის გარეშე, და კოეფიციენტების სხვადასხვა ტიპების გამოყენებით მარტივი ფსევდო-შემთხვევითი თანმიმდევრობის გამოყენებით.

ჩვენ შევამცირებთ: განახორციელოს აბსტრაქტული ხასიათი მაგიდის გამოყენება hashing, თქვენ ჯერ უნდა გააფართოვოთ აბსტრაქტული ტიპის ინტერფეისი, გარდამტეხ იგი hash ოპერაცია, რომელიც აჩვენებს გასაღებები არასამთავრობო ნეგატიური რიცხვები, პატარა მაგიდის ზომა მ.

ამ სტატიის ნაწილი, მე გეტყვით რა არის hashრატომ არის საჭირო, სად და როგორ გამოიყენება, ისევე როგორც ყველაზე ცნობილი მაგალითები.

საინფორმაციო ტექნოლოგიების სფეროში ბევრი გამოწვევები ძალიან კრიტიკულია მონაცემთა მოცულობისთვის. მაგალითად, თუ თქვენ უნდა შევადაროთ ორ ფაილს 1 KB- ის ზომა და 10 გბ-ის ორი ფაილი, მაშინ სრულიად განსხვავებული დროა. აქედან გამომდინარე, ალგორითმები, რომლებიც საშუალებას იძლევიან უფრო მოკლე და კაპიტალური ღირებულებების მუშაობას, ძალიან პოპულარულია.

ერთი ასეთი ტექნოლოგია არის hashing, რომელმაც აღმოაჩინა მისი გამოყენება, როდესაც გადაჭრის მასობრივი ამოცანები. მაგრამ, მე ვფიქრობ, როგორც ჩვეულებრივი მომხმარებელი, ჯერ კიდევ გაუგებარია, რა სახის მხეცი არის ის, რაც მას სჭირდება. აქედან გამომდინარე, შევეცდები ყველა უმარტივეს სიტყვას.

შენიშვნა: მასალა განკუთვნილია ჩვეულებრივი მომხმარებლებისთვის და არ შეიცავს ბევრ ტექნიკურ ასპექტს, თუმცა საკმარისზე მეტი საკმარისია.

რა არის hash ან hashing?

მე დავიწყებ პირობებს.

Hash ფუნქცია, convolution ფუნქცია - ეს არის სპეციალური ფუნქცია, რომელიც საშუალებას გაძლევთ გადაიყვანოთ თვითნებური სიგრძის ტექსტები ფიქსირებული სიგრძის კოდით (როგორც წესი, მოკლე ციფრული ჩანაწერი).

დამცველი - ეს არის წყარო ტექსტების ტრანსფორმაციის პროცესი.

Hash, hash კოდი, ღირებულების hash, hash-sum - ეს არის Hash ფუნქციის გამომავალი ღირებულება, რომელიც არის, რის შედეგადაც ბლოკი ფიქსირდება.

როგორც ხედავთ, პირობებს აქვს რამდენიმე ფორმის აღწერა, საიდანაც ძნელია იმის გაგება, თუ რატომ არის ეს ყველაფერი. ამიტომ, მე დაუყოვნებლივ მივცემ პატარა მაგალითს (სხვა აპლიკაციების შესახებ ცოტა მოგვიანებით გითხრათ). დავუშვათ, რომ თქვენ გაქვთ 2 ფაილი 10 გბ. როგორ შეგიძლიათ სწრაფად გაიგოთ, რომელი სჭირდება? თქვენ შეგიძლიათ გამოიყენოთ ფაილის სახელი, მაგრამ ადვილია მისი გადარქმევა. თქვენ შეგიძლიათ ნახოთ თარიღები, მაგრამ ფაილის ფაილების კოპირების შემდეგ შეიძლება იყოს იგივე ან სხვა თანმიმდევრობით. ზომა, როგორ გესმით, პატარა შეიძლება დაეხმაროს (განსაკუთრებით იმ შემთხვევაში, თუ ზომები ემთხვევა ან არ შეხედეთ ბაიტების ზუსტ ღირებულებებს).

აქ არის ის, რომ თქვენ გჭირდებათ ეს ძალიან hash, რომელიც მოკლე ბლოკი, რომელიც გენერირდება წყარო ტექსტი ფაილი. ეს ორი ფაილი 10 GB ექნება ორი განსხვავებული, მაგრამ მოკლე hash კოდი (რაღაც "Accac43535" და "BBB3232A42"). მათი გამოყენება, თქვენ შეგიძლიათ სწრაფად გაირკვეს სასურველი ფაილი.სახელების კოპირებისა და შეცვლის შემდეგაც კი.

შენიშვნა: იმის გამო, რომ Hash კომპიუტერში მსოფლიოში და ინტერნეტში არის ძალიან ცნობილი კონცეფცია, მაშინ ხშირად ეს ყველაფერი, რაც უკავშირდება hash, მცირდება ამ სიტყვის. მაგალითად, ფრაზა "მე გამოიყენე Hash MD5" თარგმანში, რომ ადგილზე ან სხვაგან სხვაგან გამოიყენება MD5 სტანდარტის ალგორითმის მიერ.

Hash თვისებები

ახლა, მე გეტყვით hash ფუნქციების თვისებების შესახებ, რათა უფრო ადვილია თქვენთვის გასაგებად, სადაც ის გამოიყენება და რა გჭირდებათ. მაგრამ პირველი განმარტება.

შეჯახება - ეს არის სიტუაცია, როდესაც ერთი და იგივე hash თანხა მიღებულია ორი სხვადასხვა ტექსტისთვის. მოგეხსენებათ, ერთხელ ფიქსირებული სიგრძის ბლოკი, მას აქვს შეზღუდული რაოდენობის შესაძლო ღირებულებები და ამიტომ იმეორებს შესაძლებელია.

და ახლა hash ფუნქციების თვისებები:

1. ტექსტი შეიძლება მიეწოდოს ნებისმიერი ზომის ტექსტს და გამომავალი არის ფიქსირებული სიგრძის მონაცემთა ბლოკი. ეს შემდეგნაირად განსაზღვრავს.

2. იგივე ტექსტების hash-sum უნდა იყოს იგივე. წინააღმდეგ შემთხვევაში, ასეთი ფუნქციები უბრალოდ უსარგებლოა - ეს არის შემთხვევითი რიცხვის მსგავსი.

3. კარგი კონვერტაციის ფუნქცია უნდა ჰქონდეს კარგი განაწილება. ეთანხმებიან, რომ თუ გამომავალი ჰაშის ზომა, მაგალითად, 16 ბაიტი, მაშინ თუ ფუნქცია მხოლოდ 3 სხვადასხვა ღირებულებას ანიჭებს ნებისმიერ ტექსტს, მაშინ არ მოქმედებს ასეთ ფუნქციებზე და ამ 16 ბაიტზე (16 ბაიტი 2 ^ 128 პარამეტრები, რომელიც დაახლოებით 3, 4 * 10 ^ 38 გრადუსს).

4. რამდენად კარგად მუშაობს ფუნქცია წყაროს ტექსტში ოდნავი ცვლილებების შესახებ. მარტივი მაგალითი. შეიცვალა 1 წერილი 10 გბ ფაილში, ფუნქციის ღირებულება უნდა იყოს განსხვავებული. თუ ეს ასე არ არის, მაშინ ძალიან პრობლემატურია ასეთი ფუნქციის გამოყენება.

5. შეჯახების შემთხვევის ალბათობა. ძალიან რთული პარამეტრი გამოითვლება გარკვეულ პირობებში. მაგრამ მისი არსი ის არის, რომ რა არის hash ფუნქციის წერტილი, თუ შედეგად hash თანხა ხშირად ემთხვევა.

6. Hasha გაანგარიშების მაჩვენებელი. რა არის ბევრი convolution ფუნქცია, თუ ეს არის დიდი ხნის განმავლობაში გამოთვლა? არა, რადგან მაშინ ფაილი უფრო ადვილია შედარება ან გამოიყენოს სხვა მიდგომა.

7. Hash ღირებულების წყაროს მონაცემების აღდგენის სირთულე. ეს დამახასიათებელი უფრო კონკრეტულია, ვიდრე საერთო, რადგან ეს არ არის აუცილებელი ყველგან. თუმცა, ყველაზე ცნობილი ალგორითმებისათვის, ეს დამახასიათებელია შეფასებული. მაგალითად, წყაროს ფაილი თქვენ შეგიძლიათ ძნელად მიიღოთ ეს ფუნქცია. თუმცა, თუ შეჯახების პრობლემა ხდება (მაგალითად, თქვენ უნდა მოძებნოთ ნებისმიერი ტექსტი, რომელიც შეესაბამება ასეთ hash), მაშინ ეს დამახასიათებელი შეიძლება იყოს მნიშვნელოვანი. მაგალითად, პაროლები, მაგრამ ცოტა მოგვიანებით.

8. ასეთი ფუნქციისთვის გახსნილი ან დახურული კოდის გახსნა. თუ კოდი არ არის ღია, მონაცემთა აღდგენის სირთულე, კერძოდ, cryptostility, რჩება კითხვაზე. ნაწილობრივ, ეს პრობლემაა დაშიფვრისთან.

ახლა თქვენ შეგიძლიათ წასვლა კითხვა "და რატომ არის ეს ყველაფერი?".

რატომ გჭირდება hash?

Hash ფუნქციების ძირითადი ამოცანებია მხოლოდ სამი (უფრო სწორად მათი მიზანი).

1. შეამოწმეთ მონაცემების მთლიანობა. -ში ეს საქმე ყველაფერი მარტივია, ასეთი ფუნქცია სწრაფად უნდა გამოითვლება და საშუალებას მოგცემთ სწრაფად შეამოწმოთ, მაგალითად, ინტერნეტში გადმოწერილი ფაილი არ იყო დაზიანებული.

2. იზრდება მონაცემთა ძიების სიჩქარე. ფიქსირებული ბლოკის ზომა საშუალებას გაძლევთ მიიღოთ უამრავი უპირატესობა ძიების ამოცანების გადაჭრაში. ამ შემთხვევაში, ჩვენ ვსაუბრობთ იმაზე, თუ რა არის წმინდა ტექნიკურად, გამოყენების hash ფუნქციების შეიძლება ჰქონდეს დადებითი გავლენა შესრულება. ასეთი ფუნქციებისათვის ძალიან მნიშვნელოვანია შეჯახების ალბათობა და კარგი განაწილება.

3. კრიპტოგრაფიული საჭიროებების გამო. ეს სახეობები Convolution ფუნქციები გამოიყენება უსაფრთხოების სფეროებში, სადაც მნიშვნელოვანია, რომ შედეგები რთულია შეცვალოს ან სადაც აუცილებელია გაართულებს ამოცანას მაქსიმალურად მაქსიმალურად. Სასარგებლო ინფორმაცია საწყისი hash.

სად და როგორ არის გამოყენებული hash?

როგორც თქვენ ალბათ უკვე მიხვდა, რომ hash ვრცელდება, როდესაც გადაჭრის ძალიან ბევრი ამოცანები. აქ არის რამდენიმე მათგანი:

1. პაროლები, როგორც წესი, არ ინახება ღია ფორმით, მაგრამ hash თანხების სახით, რომელიც საშუალებას იძლევა უზრუნველყოს უსაფრთხოების უმაღლესი ხარისხი. ყოველივე ამის შემდეგ, მაშინაც კი, თუ თავდამსხმელი მიიღებს ხელმისაწვდომობას ასეთი მონაცემთა ბაზაში, ის მაინც უნდა გაატაროთ ბევრი დრო, რათა შეარჩიოს შესაბამისი ტექსტები ამ hash კოდები. აქ არის დამახასიათებელი "თავდაპირველი მონაცემების აღდგენის სირთულე".

შენიშვნა: მე გირჩევთ, გაეცნოთ სტატიას რამდენიმე რჩევას პაროლების უსაფრთხოების გასაუმჯობესებლად.

2. პროგრამირების, მონაცემთა ბაზების ჩათვლით. რა თქმა უნდა, ყველაზე ხშირად ჩვენ ვსაუბრობთ მონაცემთა სტრუქტურების შესახებ სწრაფი ძებნა. სუფთა ტექნიკური ასპექტი.

3. მონაცემთა გადაცემის მონაცემები (მათ შორის ინტერნეტი). ბევრი ოქმები, როგორიცაა TCP / IP მოიცავს სპეციალურ გამშვები პუნქტებს, რომლებიც შეიცავს წყაროს სიტყვას, რათა მოხდეს სადღაც მარცხნივ, ეს არ იმოქმედებს მონაცემთა გადაცემას.

4. სხვადასხვა უსაფრთხოების ალგორითმებისთვის. მაგალითად, hash გამოიყენება ელექტრონული ციფრული ხელმოწერებით.

5. ფაილების მთლიანობის გადამოწმების მიზნით. თუ ყურადღება გაამახვილებთ, ხშირად შესაძლებელია ინტერნეტში ფაილების დაკმაყოფილება (მაგალითად, არქივები) დამატებითი აღწერილობა ერთად hash კოდი. ეს ღონისძიება გამოიყენება არა მხოლოდ ისე, რომ თქვენ არ შემთხვევით აწარმოებს ფაილი, რომელიც დაზიანდა, როდესაც ჩამოტვირთვისას ინტერნეტით, მაგრამ ასევე არსებობს სიმარტივის მასპინძლობს. ასეთ შემთხვევებში, თქვენ შეგიძლიათ სწრაფად შეამოწმოთ hash და საჭიროების შემთხვევაში, მაშინ overdo ფაილი.

6. ზოგჯერ, hash ფუნქციები გამოიყენება უნიკალური იდენტიფიკატორების შესაქმნელად (როგორც ნაწილი). მაგალითად, სურათების დაზოგვისას ან უბრალოდ ფაილების შენახვა, როგორც წესი, გამოიყენეთ hash in სახელები ერთად თარიღი და დრო. ეს საშუალებას გაძლევთ არ გადაწეროთ ფაილები იგივე სახელით.

სინამდვილეში, უფრო ხშირად, უფრო ხშირად hash ფუნქციები გამოიყენება საინფორმაციო ტექნოლოგიები. ძირითადად იმის გამო, რომ მონაცემების რაოდენობა და ყველაზე მეტად მარტივი კომპიუტერები მკაცრად გაიზარდა. პირველ შემთხვევაში, ჩვენ უფრო მეტი ძიების შესახებ ვართ, ხოლო მეორე კი უფრო მეტი უსაფრთხოების საკითხებზე ვართ.

ცნობილი hash ფუნქციები

ყველაზე ცნობილი არის შემდეგი სამი hash ფუნქციები.

Ანოტაცია: ამ ლექციაში, დამონტაჟებული ფუნქციის კონცეფცია ჩამოყალიბებულია, ისევე როგორც მოკლე მიმოხილვა ალგორითმები hash ფუნქციების ფორმირებისათვის. გარდა ამისა, ითვლება ბლოკის ალგორითმების გამოყენების შესაძლებლობა, რათა შეიქმნას hash ფუნქცია.

ლექციის მიზანი: გაეცნოს "Hash ფუნქციის" კონცეფციას, ისევე როგორც ასეთი ფუნქციების პრინციპებს.

კონცეფცია hash ფუნქცია

Hash ფუნქცია (Hash ფუნქცია) მათემატიკური ან სხვა ფუნქცია ეწოდება, რაც თვითნებური სიგრძის ხაზებისთვის ცალმხრივად ან ფიქსირებული სიგრძის სხვა სიმპტომების მიხედვით. მათემატიკურად, ეს შეიძლება იყოს დაწერილი:

სადაც M არის ორიგინალური შეტყობინება, რომელსაც ზოგჯერ მოუწოდა საჩუქარიდა H - შედეგი მოუწოდა hash ფუნქცია (ისევე, როგორც hash კოდი ან დაიჯესტი შეტყობინება (ინგლისურიდან. გაგზავნა დაიჯესტი)).

Hash ფუნქციის მნიშვნელობა არის ნიმუშის დამახასიათებელი თვისება - hash ფუნქციის მნიშვნელობა. ეს მნიშვნელობა ჩვეულებრივ აქვს გარკვეული ფიქსირებული ზომა, მაგალითად, 64 ან 128 ბიტი. Hash კოდი შეიძლება კიდევ უფრო გაანალიზდეს ნებისმიერი ამოცანის გადასაწყვეტად. მაგალითად, hashing შეიძლება გამოყენებულ იქნას მონაცემების შედარება: თუ ორი hash- კოდები განსხვავებულია, მასალები გარანტირებულია; თუ იგივე - მასივები სავარაუდოდ იგივეა. ზოგადად, ცალსახად კორესპონდენცია წყაროს მონაცემებსა და ჰეშ კოდს შორის არ არის იმის გამო, რომ hash ფუნქციების რაოდენობა ყოველთვის ნაკლებია, ვიდრე შეყვანის პარამეტრები. აქედან გამომდინარე, არსებობს უამრავი შეყვანის შეტყობინება, რომელიც მისცემს იგივე hash კოდებს (ასეთი სიტუაციები ეწოდება კოლოისია). შეჯახების შემთხვევების ალბათობა მნიშვნელოვან როლს ასრულებს hash ფუნქციების ხარისხის შეფასებისას.

Hash ფუნქციები ფართოდ გამოიყენება თანამედროვე კრიპტოგრაფიაში.

მარტივი hash ფუნქცია შეიძლება მომზადდეს გამოყენებით "თანხა 2" ოპერაცია შემდეგნაირად: ჩვენ მივიღებთ შეყვანის სიმებიანი, ჩვენ ჩამოყაროს ყველა bytes მიერ მოდული 2 და Byte შედეგი დაბრუნებას როგორც hash fuch. Hash ფუნქციის ხანგრძლივობა იქნება ამ შემთხვევაში 8 ბიტი, მიუხედავად შეყვანის ზომისა.

მაგალითად, მოათავსეთ ორიგინალური შეტყობინება ციფრული ხედვის მიხედვით, შემდეგი (ჰექსადეციალური ფორმატით):

ჩვენ დავუბრუნებთ შეტყობინებას ორობითი სახე, დაწერეთ ბაიტი ერთმანეთთან და ჩაუყარა ბიტი თითოეულ სვეტში მოდულის 2:

0011 1110 0101 0100 1010 0000 0001 1111 1101 0100 ---------- 0110 0101

შედეგი (0110 0101 (2) ან 65 (16)) და იქნება hash ფუნქციის ღირებულება.

თუმცა, ასეთი hash ფუნქცია არ შეიძლება გამოყენებულ იქნას კრიპტოგრაფიული მიზნებისათვის, მაგალითად, ფორმირებისათვის ელექტრონული ხელმოწერამას შემდეგ, რაც ადვილია შეცვალოს ხელმოწერილი შეტყობინებების შინაარსი შემოწმების ღირებულებების შეცვლის გარეშე.

აქედან გამომდინარე, განიხილება Hash ფუნქცია არ არის შესაფერისი კრიპტოგრაფიული პროგრამებისთვის. კრიპტოგრაფიაში, Hash ფუნქცია ითვლება კარგია, თუ ძნელია შექმნას ორი ტიპის იგივე hash ფუნქცია, ისევე როგორც ფუნქცია გამომავალი არ არის მკაფიოდ დამოკიდებული შესასვლელთან.

ჩვენ ჩამოყალიბებთ კრიპტოგრაფიული hash ფუნქციების ძირითად მოთხოვნებს:

  • hash ფუნქცია უნდა იყოს გამოყენებული ნებისმიერი ზომის გაგზავნა;
  • ფუნქციის ღირებულების გაანგარიშება უნდა შესრულდეს სწრაფი საკმარისი;
  • კარგად ცნობილი hash ფუნქცია, ეს უნდა იყოს რთული (თითქმის შეუძლებელია) იპოვოს შესაფერისი პროტოტიპი M;
  • კარგად ცნობილ გზავნილთან ერთად, უნდა იყოს რთული, რომ იპოვოთ სხვა შეტყობინება M 'იმავე ღირებულებით hash ფუნქცია, როგორიცაა წყარო შეტყობინება;
  • ძნელია იპოვოთ ნებისმიერი წყვილი შემთხვევითი სხვადასხვა შეტყობინებები იგივე hash ფუნქცია.

შექმნა hash ფუნქცია, რომელიც აკმაყოფილებს ყველა ჩამოთვლილი მოთხოვნების არ არის ადვილი ამოცანა. ასევე აუცილებელია გვახსოვდეს, რომ ფუნქციის ფუნქცია მიიღება თვითნებური ზომის ფუნქციაზე და Hash შედეგი არ უნდა იყოს თანაბრად იგივე ამ სხვადასხვა ზომისათვის.

ამჟამად, პრაქტიკაში, ფუნქციების დამუშავება შეყვანის შეტყობინება გამოიყენება როგორც hash ფუნქციები, და გაანგარიშების hash ღირებულება H i თითოეული M ბლოკზე შეყვანის გზავნილის დამოკიდებულნი ტიპის

h i \u003d h (m i, h i-1)

სადაც H I-1 არის შედეგი მიღებული, როდესაც გაანგარიშების hash ფუნქცია წინა ბლოკი Შესაყვანი მონაცემები.

შედეგად, hash ფუნქცია სარგებელი h n არის ფუნქცია ყველა n შეყვანის ბლოკები.

გამოიყენეთ ბლოკის ალგორითმები შიფრირების მიზნით hash ფუნქცია

თქვენ შეგიძლიათ გამოიყენოთ ბლოკი, როგორც hash ფუნქცია. თუ ბლოკის ალგორითმის მიერ გამოყენებული ბლოკები, მაშინ hash ფუნქცია ეფუძნება მას საიმედო.

ბლოკის ალგორითმის გამოყენების მარტივი გზა Hash Code- ის მისაღებად CBC რეჟიმში გაგზავნა. ამ შემთხვევაში, გაგზავნა წარმოდგენილია ბლოკების თანმიმდევრობით, რომელთა სიგრძე დაშიფვრის ალგორითმის ერთეულის სიგრძეა. საჭიროების შემთხვევაში, ბოლო ერთეული ავსებს მარჯვენა zeros- ს, ისე, რომ სასურველი სიგრძის ერთეულია. Hash იქნება ბოლო დაშიფრული ტექსტი ბლოკი. საიმედო ბლოკის დაშიფვრის ალგორითმის გამოყენების შემთხვევაში, შედეგად Hash ღირებულება ექნება შემდეგ თვისებებს:

  • თითქმის შეუძლებელია ინფორმაციის მოპოვების ღია მნიშვნელობის კოდირების ძირითადი გაანგარიშების გარეშე;
  • პრაქტიკულად შეუძლებელია გარეშე იცის კოდირების ძირითადი შერჩევა ღია მონაცემების ქვეშ მითითებული hash ღირებულება.

ამ გზით ჩამოყალიბებული სახსრების ღირებულება ჩვეულებრივ მოუწოდა imitovka ან აუთენტური და გამოიყენება შეტყობინების მთლიანობის შესამოწმებლად. ამდენად, სიმულატორი არის კონტროლის კომბინაცია, რომელიც დამოკიდებულია ღია მონაცემებსა და საიდუმლო ძირითად ინფორმაციას. IMITOVKA- ის გამოყენების მიზანია ინფორმაციის მოპოვების ყველა შემთხვევითი ან განზრახ ცვლილებების გამოვლენა. Hash ფუნქციის მიერ მიღებული ღირებულება, როდესაც შეყვანის შეტყობინების დამუშავებისას მიღებული ღირებულება ერთ მომენტში მიმაგრებულია, როდესაც ცნობილია, რომ შეტყობინება სწორია. მიმღები ამოწმებს შეტყობინების მთლიანობას მიღებული წერილის იმიტის გაანგარიშებით და შედარებით Hash კოდით, რომელიც უნდა გადაეცეს უსაფრთხო გზას. Ერთ - ერთი მათგანი უსაფრთხო გზები შესაძლოა, imitovka- ის დაშიფვრა დახურული გასაღები გამომგზავნი, ანუ ხელმოწერის შექმნა. ასევე შესაძლებელია, რომ მოპოვებული ჰეშ კოდექსის ალგორითმი სიმეტრიული დაშიფვრისათვის, თუ გამგზავნი და მიმღები აქვს სიმეტრიული დაშიფვრის საერთო გასაღები.

IMITOVKA- ის მოპოვებისა და გამოყენების სპეციფიკური პროცესი აღწერილია შიდა სტანდარტის GOST 28147-89. სტანდარტული შეთავაზება გამოიყენოს ახალგაზრდა 32 ბიტი ბლოკზე, რომელიც მოპოვებულია Cipher Block Clutch Mode- ის მთლიანი წერილის დაშიფვრის ოპერაციის გამომავალზე, რომელიც მონიტორინგს გაუწევს გადაცემულ შეტყობინებას. ანალოგიურად, ნებისმიერი ბლოკი შეიძლება გამოყენებულ იქნას imitavka გენერირება ალგორითმი სიმეტრიული შიფრაცია.

კიდევ ერთი გზა გამოიყენოს ბლოკი cipher გენერირება hash კოდი არის შემდეგი. წყარო შეტყობინება დამუშავებულია სერიის ბლოკებში. ბოლო ბლოკი, საჭიროების შემთხვევაში, ავსებს Zeros- ს, ზოგჯერ უკანასკნელ ბლოკში თქვენ აპირებთ ფორმაში შეტყობინების სიგრძეზე ორობითი ნომრები. ყოველ ეტაპზე, წინა ეტაპზე მიღებული ჰაშის ღირებულების დაშიფვრა, მიმდინარე შეტყობინება, როგორც გასაღები. ბოლო შევიდა დაშიფრული ღირებულება იქნება საბოლოო hash.

სინამდვილეში, რამდენიმე სქემა გამოყენებით ბლოკი cipher შექმნას hash ფუნქცია. მოდით მე ვიყოთ წყარო ბლოკის ერთეული, Hi - Hash ფუნქციის ღირებულება I-Level Stage, F არის ბლოკი დაშიფვრის ალგორითმი გამოიყენება მარტივი ჩანაცვლება რეჟიმში - დამატებით ოპერაცია მოდული 2. შემდეგ შესაძლებელია, მაგალითად, შემდეგი hash ფუნქციის ფორმირების სქემები:

ყველა ამ დიაგრამაში, გენერირებული hash ღირებულების სიგრძე ტოლია ბლოკის სიგრძეზე დაშიფვრის დროს. ეს ყველაფერი, ისევე, როგორც სხვა სქემები ბლოკის ალგორითმის გამოყენებისათვის, რათა გამოიყენოთ hash ღირებულებების გამოთვლა პრაქტიკაში.

ბლოკ ალგორითმების საფუძველზე შექმნილი Hash ფუნქციების ძირითადი მინუსი შედარებით არის შედარებით დაბალი სიჩქარე მუშაობა. საჭირო Cryptoscope ასევე შეიძლება უზრუნველყოფილი იყოს მცირე რაოდენობის ოპერაციების შეყვანის მონაცემები. არსებობს უფრო სწრაფად hashing ალგორითმები შექმნილია დამოუკიდებლად ნულიდან, რომელიც ეფუძნება Cryptic წინააღმდეგობის მოთხოვნებს (ყველაზე გავრცელებული მათ - MD5, SHA-1, Sha-2 და GOST R 34.11-94).


რა არის hash?Hash ფუნქცია ეწოდება მათემატიკურ ტრანსფორმაციას ინფორმაციის მოკლე, გარკვეული სიგრძის სიმებიანი.

რატომ გჭირდებათ ეს?ანალიზი hash ფუნქციების ხშირად გამოიყენება მონიტორინგი მთლიანობის მნიშვნელოვანი ფაილი. ოპერაციული სისტემა, მნიშვნელოვანი პროგრამები, მნიშვნელოვანი მონაცემები. კონტროლი შეიძლება გაკეთდეს როგორც საჭიროა, როგორც საჭიროა და რეგულარულად.

როგორ ხდება ეს?თავდაპირველად, განსაზღვრავს, თუ რომელი ფაილების მთლიანობა უნდა მონიტორინგი. თითოეული ფაილი, იგი გამოითვლება გამოთვლა მისი hash მეტი სპეციალური ალგორითმი ხოლო შენარჩუნების შედეგი. საჭირო დროის შემდეგ, მსგავსი გაანგარიშება ხდება და შედეგები შედარებულია. თუ ღირებულებები განსხვავდება, ეს იმას ნიშნავს, რომ ფაილში არსებული ინფორმაცია შეიცვალა.

რა თვისებებს უნდა ჰქონდეს hash ფუნქცია?

  • უნდა შეასრულოს თვითნებური სიგრძის მონაცემების ტრანსფორმაციები;
  • უნდა ჰქონდეს ღია ალგორითმი ისე, რომ მისი კრიპტოსკოპი შეიძლება შესწავლილი იყოს;
  • უნდა იყოს ცალმხრივი, ანუ, არ უნდა არსებობდეს მათემატიკური შესაძლებლობები წყაროს მონაცემების განსაზღვრის გზით;
  • უნდა "წინააღმდეგობის გაწევა" კონფლიქტებს, ანუ, არ უნდა მისცეს იგივე ღირებულებებს სხვადასხვა შეყვანის მონაცემებით;
  • არ უნდა მოითხოვოს დიდი კომპიუტერული რესურსები;
  • შეყვანის მონაცემებში ოდნავი ცვლილება, შედეგი მნიშვნელოვნად უნდა შეიცვალოს.

რა არის პოპულარული hashing ალგორითმები?შემდეგი hash ფუნქციები ამჟამად გამოიყენება:

  • CRC - ციკლური ჭარბი კოდი ან ჩეკი. ალგორითმი ძალიან მარტივია, აქვს დიდი რიცხვი ვარიაციები დამოკიდებულია საჭირო გამომავალი სიგრძეზე. არა კრიპტოგრაფიული!
  • MD 5 არის ძალიან პოპულარული ალგორითმი. Მისი მსგავსი წინა ვერსია MD 4 არის კრიპტოგრაფიული ფუნქცია. Hesha ზომა 128 ბიტი.
  • SHA -1 ასევე ძალიან პოპულარული Cryptographic Confunction. Hesha ზომა 160 ბიტი.
  • GOST R 34.11-94 - რუსული კრიპტოგრაფიული სტანდარტი Hash ფუნქციების გაანგარიშებისათვის. Hesha ზომა 256 ბიტი.

როდის შეიძლება ამ ალგორითმების გამოყენება სისტემის ადმინისტრატორს?ხშირად, როდესაც ნებისმიერი შინაარსის ჩამოტვირთვისას, როგორიცაა მწარმოებელი მწარმოებელი, მუსიკა, ფილმები, ან სხვა ინფორმაცია. კონტროლის თანხებიგამოითვლება კონკრეტული ალგორითმის მიხედვით. უსაფრთხოების მიზეზების გამო, ჩამოტვირთვის შემდეგ აუცილებელია ჰეშ ფუნქციის დამოუკიდებელი გაანგარიშების ჩატარება და შეადაროთ ღირებულება, თუ რა არის მითითებული ვებ-გვერდზე ან განაცხადში ფაილში. ოდესმე გააკეთე ეს?

რა არის უფრო მოსახერხებელია hash?ახლა არსებობს დიდი რაოდენობით მსგავსი კომუნალური ორივე ფასიანი და თავისუფალი გამოყენება. მე პირადად მე მომეწონა Hashtab. პირველი, კომუნალური დროს ინსტალაცია ჩანერგილია ფაილების თვისებებზე, მეორეც, საშუალებას გაძლევთ აირჩიოთ დიდი რაოდენობით ალგორითმები, ხოლო მესამე არაკომერციული გამოყენებისათვის.

რა არის რუსული?როგორც ზემოთ აღვნიშნეთ, არის, რომ Gost GOST R 34.11-94-ის სტანდარტი არსებობს, რომელიც ყველგან იყენებს ინფორმაციული უსაფრთხოების ინსტრუმენტების ბევრ მწარმოებელს. ერთ-ერთი ასეთი სახსრები არის ორიგინალური სახელმწიფოს ფიქსისა და კონტროლის პროგრამა. პროგრამული პაკეტი "ფიქსი". ეს პროგრამა არის SZI- ის გამოყენების ეფექტურობის კონტროლის საშუალება.

Fix (ვერსია 2.0.1) for Windows 9x / NT / 2000 / XP

  • გამოთვალეთ მითითებული ფაილების შემოწმება 5-ის ერთ-ერთმა ალგორითმა.
  • პროგრამული პაკეტის ორიგინალური მდგომარეობის ფიქსაცია და შემდგომი კონტროლი.
  • პროგრამული პაკეტის ვერსიების შედარება.
  • კატალოგების ფიქსაცია და კონტროლი.
  • მონიტორინგის ცვლილებები მითითებულ ფაილებში (დირექტორიები).
  • TXT- ის ანგარიშების ფორმირება, HTML, SV ფორმატებში.
  • პროდუქციას აქვს FSTEC- ის სერტიფიკატი NDV 3 № 913 2013 წლის 1 ივნისამდე.

და როგორ შესახებ EDS?ფუნქციის გაანგარიშების შედეგად მომხმარებელთა საიდუმლო გასაღები შეყვანის კრიპტოგრაფიული ალგორითმის შეყვანისას, სადაც ელექტრონულად ციფრული ხელმოწერა გამოითვლება. მკაცრად ლაპარაკი, hash ფუნქცია არ არის eds ალგორითმის ნაწილი, მაგრამ ხშირად ეს კეთდება კონკრეტულად, რათა გამოვყოთ თავდასხმის საჯარო გასაღები.

ამჟამად, ბევრი ელექტრონული კომერციის განაცხადების საშუალებას მოგცემთ შეინახოთ მომხმარებლის საიდუმლო გასაღები დახურულ ნიშნად (Rutoken, Etoken) გარეშე ტექნიკური უნარი ამონაწერი მას. ნიშნად თავისთავად აქვს ძალიან შეზღუდული ფართობი მეხსიერების, იზომება kilobytes. დოკუმენტის ხელმოწერას არ აქვს შესაძლებლობა, გადარიცხოს დოკუმენტი თავისთავად, მაგრამ დოკუმენტის გადაცემას ნიშნად და EDS- ის გასასვლელად ძალიან მარტივია.

კითხვები:

1. Hash ფუნქციის კონცეფცია.

2. გამოიყენეთ ბლოკის ალგორითმები დაშიფვრისათვის, რათა შეიქმნას hash ფუნქცია.

3. ალგორითმების მიმოხილვა Hash ფუნქციების ფორმირებისთვის.

1. კონცეფცია hash ფუნქცია

Hash ფუნქცია(Hash ფუნქცია) ეწოდება მათემატიკურ ან სხვა ფუნქციას, რომელიც თვითნებური სიგრძის ხაზებს ითვლის ზოგიერთი რიცხვი ან ფიქსირებული სიგრძის სხვა სიმებიანი. მათემატიკურად, ეს შეიძლება იყოს დაწერილი:

თ. \u003d H (მ) ,

სად მ. - წყარო შეტყობინება მოუწოდა ზოგჯერ საჩუქარი , მაგრამ თ. - შედეგი სახელწოდებით Hash ფუნქციის ღირებულება (ისევე, როგორც hash კოდი ან დაიჯესტი შეტყობინება (ინგლისურიდან. გაგზავნა დაიჯესტი)).

Hash ფუნქციის მნიშვნელობა არის ნიმუშის დამახასიათებელი თვისება - hash ფუნქციის მნიშვნელობა. ეს მნიშვნელობა ჩვეულებრივ აქვს გარკვეული ფიქსირებული ზომა, მაგალითად, 64 ან 128 ბიტი. Hash კოდი შეიძლება კიდევ უფრო გაანალიზდეს ნებისმიერი ამოცანის გადასაწყვეტად. მაგალითად, hashing შეიძლება გამოყენებულ იქნას მონაცემების შედარება: თუ ორი hash- კოდები განსხვავებულია, მასალები გარანტირებულია; თუ იგივე - მასივები სავარაუდოდ იგივეა. ზოგადად, ცალსახად კორესპონდენცია წყაროს მონაცემებსა და ჰეშ კოდს შორის არ არის იმის გამო, რომ hash ფუნქციების რაოდენობა ყოველთვის ნაკლებია, ვიდრე შეყვანის პარამეტრები. აქედან გამომდინარე, არსებობს უამრავი შეყვანის შეტყობინება, რომელიც მისცემს იგივე hash კოდებს (ასეთი სიტუაციები ეწოდება კოლოისია ). შეჯახების შემთხვევების ალბათობა მნიშვნელოვან როლს ასრულებს hash ფუნქციების ხარისხის შეფასებისას.

Hash ფუნქციები ფართოდ გამოიყენება თანამედროვე კრიპტოგრაფიაში.

მარტივი hash ფუნქცია შეიძლება შედგენილი გამოყენებით "მოდულის 2" ოპერაცია შემდეგნაირად: ჩვენ მივიღებთ შეყვანის სიმებიანი, ჩვენ ჩამოყაროს ყველა bytes მიერ მოდული 2 და Byte შედეგი დაბრუნების როგორც hash fuch ღირებულება. Hash ფუნქციის ხანგრძლივობა იქნება ამ შემთხვევაში 8 ბიტი, მიუხედავად შეყვანის ზომისა.

მაგალითად, მოათავსეთ ორიგინალური შეტყობინება ციფრული ხედვის მიხედვით, შემდეგი (ჰექსადეციალური ფორმატით):

2 ბ.1 4 ა9 5 ვ.ე.4

ჩვენ დავუბრუნებთ შეტყობინებას ორობითი სახე, დაწერეთ ბაიტი ერთმანეთთან და ჩაუყარა ბიტი თითოეულ სვეტში მოდულის 2:

0010 1011

0001 0100

1010 1001

0101 1111

1110 0100

——————-

0010 1101

შედეგი: 0010 1101 ან 2 დ. და ეს იქნება hash ფუნქციის ღირებულება.

თუმცა, ასეთი hash ფუნქცია არ შეიძლება გამოყენებულ იქნას კრიპტოგრაფიული მიზნებისათვის, მაგალითად, ელექტრონული ხელმოწერის ჩამოყალიბება, რადგან ეს საკმაოდ მარტივია შეცვალოს ხელმოწერილი შეტყობინების შინაარსი შემოწმების ღირებულებების შეცვლის გარეშე.

აქედან გამომდინარე, ტესტი Hash ფუნქცია არ არის შესაფერისი კრიპტოგრაფიული პროგრამებისთვის. კრიპტოგრაფიაში, Hash ფუნქცია ითვლება კარგი, თუ ძნელია შექმნას ორი ტიპის იგივე hash ფუნქცია, ისევე როგორც ფუნქცია გამომავალი არ აქვს აშკარა დამოკიდებულება შესასვლელთან.

ჩვენ ჩამოყალიბებთ კრიპტოგრაფიული hash ფუნქციების ძირითად მოთხოვნებს:

· Hash ფუნქცია უნდა იყოს გამოყენებული ნებისმიერი ზომის გაგზავნა;

· ფუნქციის ღირებულების გაანგარიშება უნდა მოხდეს სწრაფი საკმარისი;

· Hash ფუნქციის ცნობილი მნიშვნელობის მქონე, ეს უნდა იყოს რთული (თითქმის შეუძლებელი), რათა იპოვოს შესაფერისი პროტოტიპი მ. ;

· ცნობილი ცნობით მ. ძნელია კიდევ ერთი გზავნილი იპოვოთ. M ' იმავე ღირებულებით hash ფუნქცია, როგორიცაა წყარო შეტყობინება;

· ძნელია იპოვოთ ნებისმიერი წყვილი შემთხვევითი სხვადასხვა შეტყობინებები იმავე hash ფუნქციით.

შექმნა hash ფუნქცია, რომელიც აკმაყოფილებს ყველა ჩამოთვლილი მოთხოვნების არ არის ადვილი ამოცანა. ასევე აუცილებელია გვახსოვდეს, რომ ფუნქციის ფუნქცია მიიღება თვითნებური ზომის ფუნქციაზე და Hash შედეგი არ უნდა იყოს თანაბრად იგივე ამ სხვადასხვა ზომისათვის.

ამჟამად, პრაქტიკაში, ფუნქციები გამოიყენება როგორც hash ფუნქციები, გადამუშავება შეყვანის გაგზავნა ბლოკი უკან ერთეული და გაანგარიშების hash- h I. თითოეული ბლოკისთვის მე ვარ. შეყვანის შეტყობინება დამოკიდებულებაზე

h i \u003d h (m i, h i-1)

სად h I-1 - შედეგად მიღებული შედეგების გამოტანა შეყვანის მონაცემების წინა ბლოკის ფუნქციის გაანგარიშებისას.

შედეგად, hash ფუნქციის სარგებელი h N. არის ყველა ფუნქცია ნ. შეყვანის ბლოკები.

2. გამოიყენეთ ბლოკის ალგორითმების დაშიფვრა, რათა შეიქმნას hash ფუნქცია.

როგორც hash ფუნქცია, შეგიძლიათ გამოიყენოთ ბლოკის ალგორითმი სიმეტრიული შიფრაცია. თუ ბლოკის ალგორითმი გამოიყენება კრიპტოგრაფიული strut, მაშინ hash- ფუნქცია ეფუძნება მას საიმედო.

ბლოკის ალგორითმის გამოყენების მარტივი გზა Hash Code- ის მისაღებად CBC- ის რეჟიმში მესიჯების დაშიფვრის ( Cipher ბლოკი Chaining - Ciphertex Clutch რეჟიმი). ამ შემთხვევაში, გაგზავნა წარმოდგენილია ბლოკების თანმიმდევრობით, რომელთა სიგრძე დაშიფვრის ალგორითმის ერთეულის სიგრძეა. საჭიროების შემთხვევაში, ბოლო ერთეული ავსებს მარჯვენა zeros- ს, ისე, რომ სასურველი სიგრძის ერთეულია. Hash იქნება ბოლო დაშიფრული ტექსტი ბლოკი. საიმედო ბლოკის დაშიფვრის ალგორითმის გამოყენების გათვალისწინებით, მიღებული Hash ექნება შემდეგი თვისებები:

· პრაქტიკულად შეუძლებელია ინფორმაციის მოპოვების მნიშვნელობის კოდირების ძირითადი გაანგარიშების გარეშე;

· პრაქტიკულად შეუძლებელია იმის გარეშე, რომ არ იცოდეს ღია მონაცემების დაშიფვრის ძირითადი შერჩევა მითითებულ hash ღირებულებისთვის.

თავმდაბალი ჩამოყალიბდა ამ გზით, როგორც წესი, მოუწოდა imitovka ან აუთენტური და გამოიყენება შეტყობინების მთლიანობის შესამოწმებლად. ამდენად, სიმულატორი არის კონტროლის კომბინაცია, რომელიც დამოკიდებულია ღია მონაცემებსა და საიდუმლო ძირითად ინფორმაციას. IMITOVKA- ის გამოყენების მიზანია ინფორმაციის მოპოვების ყველა შემთხვევითი ან განზრახ ცვლილებების გამოვლენა. Hash ფუნქციის მიერ მიღებული ღირებულება, როდესაც შეყვანის შეტყობინების დამუშავებისას მიღებული ღირებულება ერთ მომენტში მიმაგრებულია, როდესაც ცნობილია, რომ შეტყობინება სწორია. მიმღები ამოწმებს შეტყობინების მთლიანობას მიღებული წერილის იმიტის გაანგარიშებით და შედარებით Hash კოდით, რომელიც უნდა გადაეცეს უსაფრთხო გზას. ერთ-ერთი ასეთი უსაფრთხო გზა შეიძლება იყოს დახურული გასაღების მიერ გამგზავნის იმიტირების imitancy, I.E. ხელმოწერის შექმნა. ასევე შესაძლებელია, რომ მოპოვებული ჰეშ კოდექსის ალგორითმი სიმეტრიული დაშიფვრისათვის, თუ გამგზავნი და მიმღები აქვს სიმეტრიული დაშიფვრის საერთო გასაღები.

IMITOVKA- ის მოპოვებისა და გამოყენების სპეციფიკური პროცესი აღწერილია შიდა სტანდარტის GOST 28147-89. სტანდარტული შეთავაზება გამოიყენოს ახალგაზრდა 32 ბიტი ბლოკზე, რომელიც მოპოვებულია Cipher Block Clutch Mode- ის მთლიანი წერილის დაშიფვრის ოპერაციის გამომავალზე, რომელიც მონიტორინგს გაუწევს გადაცემულ შეტყობინებას. ანალოგიურად, სიმეტრიული დაშიფვრის ნებისმიერი ბლოკის ალგორითმი შეიძლება გამოყენებულ იქნას იმტივაკას შექმნას.

კიდევ ერთი გზა გამოიყენოს ბლოკი cipher გენერირება hash კოდი არის შემდეგი. წყარო შეტყობინება დამუშავებულია სერიის ბლოკებში. ბოლო ბლოკი დაემატება zeros- ს, თუ საჭიროა, ხანდახან ორობითი რიცხვის სახით გზავნილის სიგრძე ბოლო ბლოკზე მიეკუთვნება. ყოველ ეტაპზე, წინა ეტაპზე მიღებული hash encrypt, რომელიც მიმდინარე გაგზავნა ბლოკად, როგორც გასაღები. ბოლო შევიდა დაშიფრული ღირებულება იქნება საბოლოო hash.

ამდენად, თუ ჩვეულებრივი შეტყობინება დაშიფვრის სქემა მ. ბლოკის გამოყენებით ვ. გასაღები -კენ ჩვენ ჩაწერილი E \u003d f (m, k) შემდეგ hash კოდი სქემა თ. ზემოთ აღწერილი ალგორითმის მიხედვით, შეგიძლიათ წარმოიდგინოთ, როგორ

h I. = ვ. ( h I. -1 , მ. )

როგორც თავდაპირველი hash კოდი h 0. გარკვეული მუდმივი. დაშიფვრა ხორციელდება მარტივი ჩანაცვლების რეჟიმში. გამოყენება მითითებული მეთოდი ბლოკის ზომა ემთხვევა სიგრძით გასაღები და ზომა hash ღირებულება იქნება ხანგრძლივობა ერთეული.

სხვა გზა გამოიყენოთ ბლოკი cipher in მარტივი ჩანაცვლება რეჟიმში ასევე შესაძლებელია: შეტყობინება ელემენტები დაშიფრულია წინა ეტაპზე მიღებული hash ღირებულებით:

h I. = ვ. ( მ. , h I. -1 ,)

სინამდვილეში, რამდენიმე სქემა გამოყენებით ბლოკი cipher შექმნას hash ფუნქცია. მოდით იყოს მე ვარ. - წყარო შეტყობინების ბლოკი, h I. - Hash ფუნქციის ღირებულება ᲛᲔ. -სცენა, ვ. - ბლოკის ალგორითმი დაშიფვრისათვის გამოიყენება მარტივი ჩანაცვლების რეჟიმში - მოდულის დამატებით ოპერაცია 2. მაგალითად, მაგალითად, შემდეგი hash ფუნქციები ფორმირების სქემები:

ყველა ამ დიაგრამაში, გენერირებული hash ღირებულების სიგრძე ტოლია ბლოკის სიგრძეზე დაშიფვრის დროს. ეს ყველაფერი, ისევე, როგორც სხვა სქემები ბლოკის ალგორითმის გამოყენებისათვის, რათა გამოიყენოთ hash ღირებულებების გამოთვლა პრაქტიკაში.

ბლოკის ალგორითმების საფუძველზე შექმნილი hash ფუნქციების ძირითადი მინუსი შედარებით დაბალი სიჩქარეა. საჭირო Cryptoscope ასევე შეიძლება უზრუნველყოფილი იყოს მცირე რაოდენობის ოპერაციების შეყვანის მონაცემები. არსებობს უფრო სწრაფად hashing ალგორითმები (ყველაზე გავრცელებული პირობა - MD5, SHA-1, SHA-2 და GOST R 34.11-94).

3. ალგორითმების მიმოხილვა Hash ფუნქციების ფორმირებისთვის.

ამჟამად, სხვადასხვა სპეციალური ალგორითმები შემოთავაზებულია და პრაქტიკულად გამოიყენება hash ფუნქციის გამოთვლა. ყველაზე ცნობილი ალგორითმები არიან MD5, SHA-1, Sha-2 და შა -ის სხვა ვერსიები, ასევე შიდა ალგორითმი, რომელიც ასახულია GOST R 34.11-94.

ალგორითმი MD5 მეოცე საუკუნის 90-იანი წლების დასაწყისში გამოჩნდა MD4 hash ფორმირების ალგორითმის გაუმჯობესების შედეგად. სიმბოლოები სახელი "MD" ნიშნავს გაგზავნა დაიჯესტი - რეზიუმე გაგზავნა. ალგორითმების MD4 და MD5 - R. Rivest- ის ავტორი (R.Rivest). MD5- ის გამოყენების შედეგად, 128-ბიტიანი hash ჩამოყალიბებულია თვითნებური გზავნილისთვის. შეყვანის მონაცემები დამუშავებულია 512 ბიტიანი ბლოკით. ალგორითმი იყენებს ელემენტს ლოგიკური ოპერაციები (Inversion, conjunction, მოდულის დამატება 2, ციკლური ძვრები და ა.შ.), ისევე როგორც ჩვეულებრივი არითმეტიკული გარდა. ალგორითმის ამ ელემენტარული ფუნქციების ყოვლისმომცველი გამეორება უზრუნველყოფს, რომ შედეგი კარგად არის შერეული დამუშავების შემდეგ. აქედან გამომდინარე, ნაკლებად სავარაუდოა, რომ შანსი შერჩეული ორი წერილი ჰქონდა იგივე hash კოდი. MD5 ალგორითმი აქვს შემდეგ ქონებას: თითოეული ცოტა შედეგი Hash ღირებულება ფუნქცია თითოეული შესვლის ბიტი. ითვლება, რომ MD5 არის ძლიერი hash ფუნქცია 128 ბიტიანი hash ღირებულება.

ალგორითმი შა უსაფრთხო Hash ალგორითმი - უსაფრთხო Hash-Algorithm) შემუშავდა ამერიკის შეერთებული შტატების სტანდარტებისა და ტექნოლოგიის ეროვნული ინსტიტუტის მიერ და 1993 წელს ამერიკის ფედერალური საინფორმაციო სტანდარტის სახით გამოქვეყნდა. SHA-1, ისევე როგორც MD5, MD4 ალგორითმის საფუძველზე. SHA-1 ქმნის 160 ბიტიანი hash საფუძველზე წყარო დამუშავება 512 ბიტი ბლოკები. SHA-1 ალგორითმი ასევე იყენებს მარტივი ლოგიკური და არითმეტიკული ოპერაციების გამოყენებას. MD5- დან MD5- ის ყველაზე მნიშვნელოვანი განსხვავება ისაა, რომ Hash Code Sha-1 არის 32 ბიტი, ვიდრე Hash კოდი MD5. თუ ჩვენ ვივარაუდოთ, რომ ორივე ალგორითმები არის იგივე სირთულეები Cryptanalysis, მაშინ SHA-1 არის უფრო მდგრადი ალგორითმი. მკაცრი ძალის გამოყენებით (შუბლის შეტევა), უფრო რთულია, რომ შეიქმნას თვითნებური გზავნილი, რომელსაც აქვს მოცემული hash კოდი, და ასევე უფრო რთულია შექმნას ორი შეტყობინება, რომელსაც აქვს იგივე hash კოდი.

2001 წელს ამერიკის შეერთებული შტატების სტანდარტებისა და ტექნოლოგიების ეროვნულმა ინსტიტუტმა მიიღო სამი hash ფუნქცია, როგორც სტანდარტი, ვიდრე Hash კოდექსის უფრო დიდი სიგრძე, ვიდრე SHA-1. ხშირად, ეს hash ფუნქციები ეწოდება ShA-2 ან SHA-256, SHA-384, SHA-384 და SHA-512 (ალგორითმების მიერ შექმნილი hash-code- ის სიგრძე). ეს ალგორითმები განსხვავდება არა მხოლოდ ჰაშის კოდის სიგრძეზე, არამედ შიდა ფუნქციებსა და დამუშავებული ბლოკის სიგრძეზე (SHA-256- ზე ერთეულის სიგრძე - 512 და SHA-384 და SHA-512 ბლოკის სიგრძე არის 1024 ბიტი). შა ალგორითმის თანდათანობითი გაუმჯობესება მისი კრიპტიკური წინააღმდეგობის გაზრდას იწვევს. მიუხედავად იმისა, რომ ალგორითმების განსხვავებები ერთმანეთისგან განიხილება, ყველა მათგანი შა -1 და MD4- ის შემდგომი განვითარებაა და მსგავსი სტრუქტურაა.

რუსეთში, GOST P34.11-94 მიიღება, რომელიც არის შიდა სტანდარტი Hash ფუნქციებისათვის. მისი სტრუქტურა საკმაოდ განსხვავდება SHA-1.2 ან MD5 ალგორითმების სტრუქტურისგან, რომლებიც ეფუძნება MD4 ალგორითმს. ალგორითმის GOST R 34.11-94 მიერ შექმნილი ჰარის კოდის სიგრძე 256 ბიტი. ალგორითმი თანმიმდევრულად დამუშავებულია წყაროდან 256 ბიტის ბლოკებით მარჯვნივ მარცხნივ. ალგორითმის პარამეტრი არის Hash- ის ვექტორი - თვითნებური ფიქსირებული ღირებულება ასევე 256 ბიტი. ალგორითმში, GOST R 34.11-94, permutation, shear, არითმეტიკული გარდა, მოდულის დამატება 2. როგორც დამხმარე ფუნქცია GOST 34.11-94 იყენებს ალგორითს GOST 28147-89 მარტივი ჩანაცვლების რეჟიმში.

4. მოთხოვნები hash ფუნქციები

Hash ფუნქცია ეწოდება ერთი გზა ფუნქცია განკუთვნილია მიიღოს დაიჯესტი ან "თითის ანაბეჭდის" ფაილი, შეტყობინებები ან ზოგიერთი მონაცემთა ბლოკი.

Hash კოდი იქმნება ფუნქციით ნ. :

h \u003d h (მ)

სად მ. არის თვითნებური სიგრძის გაგზავნა თ. ეს არის ფიქსირებული სიგრძის hash კოდი.

განვიხილოთ მოთხოვნები, რომლისთვისაც hash ფუნქცია უნდა შეესაბამებოდეს ისე, რომ ის შეიძლება გამოყენებულ იქნას როგორც Authenticator- ის სახით. განვიხილოთ ძალიან მარტივი მაგალითი hash ფუნქცია. შემდეგ ჩვენ გავაანალიზებთ რამდენიმე მიდგომას HASH ფუნქციის მშენებლობაში.

Hash ფუნქცია ნ. ეს გამოიყენება შეტყობინებების ავტორიზაციისთვის, უნდა ჰქონდეს შემდეგი თვისებები:

1. Hash ფუნქცია ნ. ეს უნდა იქნას გამოყენებული ნებისმიერი სიგრძის მონაცემთა ბლოკზე.

2. Hash ფუნქცია ნ. ქმნის ფიქსირებულ სიგრძეზე.

3. N (მ) შედარებით ადვილად (polynomial დრო) გამოითვლება ნებისმიერი ღირებულება მ. .

4. ნებისმიერი მოცემული hash კოდი თ. აშკარად შეუძლებელია იპოვოთ მ. ისეთივე როგორც H (m) \u003d h .

5. ნებისმიერი მოცემული თ. ეს არის გამოთვლითი შეუძლებელია, რომ იპოვოთ ეს

თ. (y) \u003d h (x).

6. ეს არის კომპიუტერულად შეუძლებელია თვითნებური წყვილი ( თ. , y. ) ისეთივე როგორც H (y) \u003d h (x) .

პირველი სამი თვისებები მოითხოვს hash ფუნქციას, რათა შეიქმნას hash კოდი ნებისმიერი გაგზავნა.

მეოთხე ქონება განსაზღვრავს hash ფუნქციების ერთ-ერთ ცალმხრივებას: ადვილად შექმნას hash კოდი ამ გზავნილისთვის, მაგრამ შეუძლებელია ამ hash კოდით გაგზავნა. ეს ქონება მნიშვნელოვანია, თუ ავტორიზაციის გამოყენებით Hash ფუნქცია მოიცავს საიდუმლო ღირებულებას. საიდუმლო ღირებულება არ შეიძლება გაიგზავნოს, თუმცა, თუ hash ფუნქცია არ არის ცალმხრივი, მტერი ადვილად შეიძლება uncover საიდუმლო ღირებულება შემდეგნაირად. გადაცემის ჩარევისას თავდამსხმელი იღებს შეტყობინებას მ. და hash კოდი C \u003d H (SAB || M) . თუ თავდამსხმელს შეუძლია შეცვალოს hash ფუნქცია, მაშინ, ამიტომ, მას შეუძლია მიიღოს SAB || M \u003d h-1 (გ) . მას შემდეგ, რაც თავდამსხმელმა ახლა იცის და მ. და SAB || მ. მიღება SA. საკმაოდ მარტივი.

მეხუთე ქონება უზრუნველყოფს, რომ შეუძლებელია სხვა გზავნილის პოვნა, რომლის ფუნქციის ღირებულებაც ემთხვევა Hash ფუნქციის ღირებულებას Ეს მესიჯი. ეს ხელს უშლის ავთენტური ყალბი დაშიფრული ჰარის კოდის გამოყენებისას. ამ შემთხვევაში ოპონენტს შეუძლია წაიკითხოს შეტყობინება და, შესაბამისად, შექმნას მისი hash კოდი. მაგრამ მას შემდეგ, რაც მტერს არ ფლობს საიდუმლო გასაღები, მას არ გააჩნია უნარი შეცვალოს გაგზავნა ისე, რომ მიმღები ვერ პოულობს მას. თუ ეს ქონება არ არის შესრულებული, თავდამსხმელს აქვს ქმედებების შემდეგი თანმიმდევრობის შესრულება: გაგზავნა და მისი დაშიფრული hash კოდი, გამოთვალეთ გაგზავნა hash კოდი, შექმნას ალტერნატიული გზავნილი იგივე hash კოდი, შეცვალოს ორიგინალური გაგზავნა ყალბი. მას შემდეგ, რაც ამ შეტყობინებების hash კოდები ემთხვევა, მიმღები არ აღმოაჩინა ჩანაცვლება.

Hash ფუნქცია, რომელიც აკმაყოფილებს პირველი ხუთი თვისებები ეწოდება მარტივი ან სუსტი hash ფუნქცია. თუ მეექვსე ქონება შესრულებულია, მაშინ ეს ფუნქცია მოუწოდებს ძლიერი hash ფუნქცია. მეექვსე საკუთრება იცავს კლასის თავდასხმებს, რომელიც ცნობილია, როგორც თავდასხმა "დაბადების დღე".

5. მარტივი hash ფუნქციები

ყველა hash ფუნქციები შესრულებულია შემდეგნაირად. შეყვანის ღირებულება (შეტყობინება, ფაილი და ა.შ.) ითვლება თანმიმდევრობით ნ. - ბიტური ბლოკები. შეყვანის ღირებულება დამუშავებულია თანმიმდევრულად ბლოკირების განყოფილებაში და იქმნება. მ. -და hash კოდი ღირებულება.

Hash ფუნქციის ერთ-ერთი ყველაზე მარტივი მაგალითია თითოეული ბლოკის xor bitwise:

ერთად I. - ᲛᲔ. Bit Hash კოდი, 1 <= i <= n .

კ. - ნომერი ნ. - ბიტიანი ბლოკების შეყვანა.

b IJ. ᲛᲔ. ცოტა ბ ჯ. ბლოკი.

შემდეგ მთელი შეტყობინება დაშიფრულია, მათ შორის Hash კოდი, CCS რეჟიმში, რათა შეიქმნას დაშიფრული ბლოკები Y1, Y2, ..., YN + 1. განსაზღვრებით, მე მაქვს:

მაგრამ xn + 1 არის hash კოდი:

მას შემდეგ, რაც წინა თანასწორობის კომპონენტები შეიძლება გამოითვლება ნებისმიერ ბრძანებაში, ამიტომ, hash კოდი არ შეიცვლება, თუ დაშიფრული ბლოკები იქნება rearranged.

Nist- ის მიერ შემოთავაზებული თავდაპირველი სტანდარტი გამოიყენა მარტივი Xor, რომელიც გამოყენებულ იქნა 64-bit გაგზავნა ბლოკად, მაშინ მთელი შეტყობინება დაშიფრულია CCS რეჟიმის გამოყენებით.

"დაბადების დღე პარადოქსი"

უფრო რთული hash ფუნქციების გათვალისწინებით, აუცილებელია მარტივი hash ფუნქციების ერთი კონკრეტული თავდასხმის ანალიზი.

ე.წ. "დაბადების დღე პარადოქსი" ასეთია. დავუშვათ, Hash ფუნქციის გამომავალი ღირებულებების რაოდენობა ნ. თანაბრად ნ. . რა უნდა იყოს ნომერი კ. კონკრეტული ღირებულებით X. და ღირებულებები Y1 Yk. ალბათ, მინიმუმ ერთი yi შესრულდა თანასწორობა

H (x) \u003d h (y)

იქნება 0.5-ზე მეტი.

Ერთისთვის Y. ალბათობა, რომ H (x) \u003d h (y) , თანაბარი 1 / ნ .

შესაბამისად, ალბათობა, რომ , თანაბარი 1 - 1 / n .

თუ თქვენ შექმნით კ. ღირებულებები, ალბათობა, რომ არანაირი შემთხვევები არ იქნება ტოლია პროდუქტის ალბათობა, რომელიც შეესაბამება ერთ ღირებულებას, I.E. (1 - 1 / n) k .

შესაბამისად, მინიმუმ ერთი დამთხვევის ალბათობა თანაბარია

1 - (1 - 1 / n) k

ამიტომ აღმოვაჩინეთ, რომ მ. -და hash კოდი საკმარისია აირჩიოს 2 მ -1 შეტყობინებები ისე, რომ Hash კოდების დამთხვევის ალბათობა 0.5-ზე მეტი იყო.

ახლა განვიხილოთ შემდეგი ამოცანა: აღინიშნოს P (n, k) ალბათობა, რომ კომპლექტი კ. ელემენტები, რომელთაგან თითოეული შეიძლება მიიღოს ნ. ღირებულებები, არსებობს მინიმუმ ორი იგივე ღირებულებები. რა უნდა იყოს თანაბარი კ. -კენ P (n, k) უფრო იქნება 0,5 ?

ელემენტების შერჩევის სხვადასხვა გზების რაოდენობა, ისე, რომ მას არ გააჩნია ორმაგი, თანაბარი

n (n - 1) ... (n - k + 1) \u003d n! / (n-k)!

ყველა შესაძლო გზა აირჩიოს ელემენტები თანაბარი n კ.

ალბათობა, რომ არ არის ორჯერ არის თანაბარი n! / (N - k)! N k

ალბათობა, რომ არსებობს დუბლიკატი, შესაბამისად

1 - n! / (N-K)! NK P (n, k) \u003d 1 - n! / ((n - k)! x nk) \u003d 1 - (n x (n - 1) x ... x (n - k-1)) / nk \u003d 1 - [(N - 1) / N X (N-2) / N X ... X (N - K + 1) / N] \u003d 1 - [(1-1 / n) x (1 - 2 / n) x ... x (1 - (k-1) / n)]

თუ Hash კოდი აქვს სიგრძე მ. ცოტა, ანუ მიღება 2 მ. ღირებულებები, თ.

მსგავსი შედეგი ეწოდება "დაბადების დღე პარადოქსს", რადგან ზემოხსენებული არგუმენტების შესაბამისად, ორი ადამიანის დაბადების დღეზე 0.5-ზე მეტია, ვიდრე ჯგუფში მხოლოდ 23 ადამიანი უნდა იყოს. ეს შედეგი, როგორც ჩანს, გასაოცარია, ალბათ იმიტომ, რომ თითოეულ ადამიანს ჯგუფში ალბათობა ალბათ, რომ ჯგუფში ვინმეს დაბადების დღე ემთხვევა დაბადების დღე, საკმაოდ მცირეა.

მოდი დავუბრუნდეთ hash ფუნქციების თვისებების გათვალისწინებას. დავუშვათ, რომ 64-ბიტიანი hash კოდი გამოიყენება. შეიძლება ჩაითვალოს, რომ საკმაოდ საკმარისია და, შესაბამისად, ჰეშ კოდისთვის უსაფრთხო სიგრძე. მაგალითად, თუ დაშიფრული hash კოდი -დან გადაცემული შესაბამისი unencrypted გაგზავნა მ. , მაშინ მტერი უნდა მოვძებნოთ M ' ისეთივე როგორც

N (m) \u003d n (m) ,

შეტყობინების შეცვლისა და მიმღების შეცდომაში შეყვანის მიზნით. საშუალოდ, მტერი უნდა დაარღვიოს 263 შეტყობინებით, რათა იპოვოს, რომ Hash კოდი უდრის შეტყობინებას.

მიუხედავად ამისა, "დაბადების დღე პარადოქსის" საფუძველზე სხვადასხვა სახის თავდასხმები შესაძლებელია. შესაძლებელია შემდეგი სტრატეგია:

1. მტერი ქმნის 2 მ / 2 შეტყობინება პარამეტრები, რომელთაგან თითოეული გარკვეული მნიშვნელობა აქვს. მტერი ამზადებს იგივე შეტყობინებებს, რომელთაგან თითოეული ყალბი და ამ გზავნილის შეცვლის საშუალებას აძლევს.

2. ორი კომპლექტი შეტყობინებები შედარებით ეძებს წყვილი შეტყობინებები მქონე იგივე hash კოდი. წარმატების ალბათობა "დაბადების დღე პარადოქსის" შესაბამისად 0.5-ზე მეტია. თუ შესაბამისი წყვილი არ არის ნაპოვნი, დამატებითი წყარო და ყალბი შეტყობინებები იქმნება, სანამ ორთქლი არ არის ნაპოვნი.

3. თავდამსხმელი სთავაზობს გამგზავნი შეტყობინებას ხელმოწერისთვის. ეს ხელმოწერა შეიძლება თან ერთვის ყალბი ვარიანტი გადაცემის მიმღებს. მას შემდეგ, რაც ორივე ვარიანტი აქვს იგივე hash კოდი, შეიქმნება იგივე ხელმოწერა. მტერი წარმატებულად იქნება დარწმუნებული, თუნდაც არ იცის დაშიფვრის გასაღები.

ამდენად, თუ 64 ბიტიანი hash კოდი გამოიყენება, საჭირო სირთულე გათვლები დაახლოებით 232.

დასასრულს, ჩვენ აღვნიშნავთ, რომ Hash კოდექსის სიგრძე საკმაოდ დიდია. სიგრძე 64 ბიტი არ არის უსაფრთხო. სასურველია, რომ სიგრძე შეადგენს 100 ბიტის ბრძანებას.

დაშიფრული ბლოკების ჯაჭვის გამოყენებით

არსებობს სხვადასხვა hash ფუნქციები საფუძველზე შექმნას ჯაჭვის დაშიფრული ბლოკები, მაგრამ გარეშე გამოყენების საიდუმლო გასაღები. ერთი ამ hash ფუნქციები შემოთავაზებული Rabin. წერილი მ. გაყოფილი ბლოკები ფიქსირებული სიგრძეზე M1, M2,. . . , Mn. და გამოყენებით სიმეტრიული დაშიფვრის ალგორითმი, როგორიცაა des, გამოთვალოთ hash კოდი გ. შემდეგნაირად:

H 0 - თავდაპირველი მნიშვნელობა მე ვ. = E mi გ. = H N.

ეს არის CSA რეჟიმში დაშიფვრის გამოყენების მსგავსი, მაგრამ ამ შემთხვევაში არ არის საიდუმლო გასაღები. როგორც ნებისმიერი მარტივი hash ფუნქციის შემთხვევაში, ეს ალგორითმი მგრძნობიარეა "დაბადების დღეზე" და თუ დაშიფვრის ალგორითმი არის DES და მხოლოდ 64-ბიტიანი hash კოდი იქმნება, სისტემა საკმაოდ დაუცველია.

შეიძლება არსებობდეს სხვა თავდასხმები, როგორიცაა "დაბადების დღე", რომელიც შესაძლებელია მაშინაც კი, თუ მტერს აქვს მხოლოდ ერთი გზავნილი და შესაბამისი დაშიფრული hash კოდი და ვერ მიიღებს რამდენიმე წყვილი შეტყობინებებს და დაშიფრული hash კოდები. შემდეგი სცენარი არის შესაძლებელი: დავუშვათ, რომ მტერმა ჩააბარა ავტორი ავთენტატორი დაშიფრული hash კოდით, და ცნობილია, რომ Unencrypted Hash კოდს აქვს სიგრძე მ. ბიტი. შემდეგი, მტერი უნდა შეასრულოს შემდეგი ქმედებები:

· ზემოთ აღწერილი ალგორითმის გამოყენებით, გამოთვალეთ Unencrypted Hash კოდი გ. .

· შექმენით ყალბი გაგზავნა ფორმით Q1, Q2,. . . , QN-2 .

· გამოთვლა N i \u003d e qi -თვის 1 <= i <= N-2 .

· Შექმნა 2 მ / 2 შემთხვევითი ბლოკები თ. და თითოეული ასეთი ბლოკი თ. გამოთვლა ჰ. . დამატებით შექმნა 2 მ / 2 საკმარისი ბლოკი Y. და თითოეული ბლოკი Y. გამოთვლა D y [g] სად დ. - დეკორატიული ფუნქცია, რომელიც შეესაბამება ე. . "დაბადების პარადოქსის" მიხედვით შეგვიძლია ვთქვათ, რომ ალბათობის მაღალი ხარისხით, ეს თანმიმდევრობა შეიცავს ბლოკებს თ. და Y. ისეთივე როგორც E x \u003d d y [y] .

· შექმენით შეტყობინება Q1, Q2,. . . , QN-2, X, Y . ამ შეტყობინებას აქვს hash კოდი გ. და, აქედან გამომდინარე, ის შეიძლება გამოყენებულ იქნას დაშიფრული ავთენტატორით.

თავდასხმის ეს ფორმა ცნობილია როგორც თავდასხმის "შეხვედრა შუა". სხვადასხვა კვლევებში, უფრო დახვეწილი მეთოდები შემოთავაზებულია ბლოკის ჯაჭვის საფუძველზე. მაგალითად, devis და ფასი აღწერილია შემდეგი ვარიანტი:

კიდევ ერთი ვარიანტი შესაძლებელია:

თუმცა, ორივე სქემებს ასევე აქვთ მოწყვლადობები სხვადასხვა თავდასხმების დროს. უფრო ზოგად შემთხვევაში, შეიძლება ნაჩვენები იყოს, რომ ზოგიერთი ფორმა "დაბადების დღე თავდასხმა" წარმატებულია ნებისმიერი hash ალგორითმით, რომელიც მოიცავს დაშიფრული ბლოკების ჯაჭვის გამოყენებას საიდუმლო გასაღების გამოყენების გარეშე.

შემდგომი კვლევა მიზნად ისახავდა სხვა მიდგომების მოძიებას, რათა შექმნას hashing ფუნქციები.

MD5 Hash ფუნქცია

განვიხილოთ MD5 შეტყობინება Digest ალგორითმი (RFC 1321) მიერ შემუშავებული რონ Rivesom საწყისი MIT.

MD5 შესრულების ლოგიკა

ალგორითმი იღებს თვითნებურ სიგრძეს შეყვანისას და ქმნის 128 სურათების შეტყობინებას, როგორც გამომავალი. ალგორითმი შედგება შემდეგი ნაბიჯებით:

ნახაზი. 8.1.MD5 შესრულების ლოგიკა

ნაბიჯი 1: დასძინა დაკარგული ბიტი

შეტყობინება შეავსებს ისე, რომ მისი სიგრძე 448 მდ. 512 (). ეს იმას ნიშნავს, რომ დამატებითი შეტყობინების სიგრძე 64 ბიტი ნაკლებია, ვიდრე ნომერი, მრავალჯერადი 512. გარდა ყოველთვის ასრულებს, მაშინაც კი, თუ გზავნილს აქვს სასურველი სიგრძე. მაგალითად, თუ გზავნილის სიგრძე 448, იგი შეავსებს 512 ბიტიდან 960 ბიტს. ამდენად, დამატებული ბიტების რაოდენობა არის 1-დან 512 წლამდე.

დასძინა შედგება ერთეული, რომელიც საჭირო რაოდენობის zeros შემდეგნაირად.

ნაბიჯი 2: დასძინა სიგრძე

წყაროს სიგრძის 64-ბიტიანი წარმომადგენლობა (დამატებით ადრე) შეტყობინებები პირველი ნაბიჯით შეუერთდება. თუ თავდაპირველი სიგრძე 2,64-ზე მეტია, მხოლოდ ბოლო 64 ბიტი გამოიყენება. ამდენად, ველი შეიცავს Source- ის სიგრძის შეტყობინებას მოდულის მიერ 2 64.

პირველი ორი ნაბიჯის შემდეგ, გაგზავნა იქმნება, რომელთა ხანგრძლივობაც არის 512 ბიტი. ეს გაფართოებული შეტყობინება წარმოდგენილია 512 ბიტიანი ბლოკების თანმიმდევრობით Y 0, Y 1,. . , Y L-1, ხოლო გაფართოებული შეტყობინების საერთო სიგრძე ტოლია L * 512 ბიტი. ამდენად, მიღებული დამატებითი შეტყობინების სიგრძე უფრო მეტია, ვიდრე თექვსმეტი 32-ბიტიანი სიტყვები.

ნახაზი. 8.2.გაფართოებული შეტყობინების სტრუქტურა

ნაბიჯი 3: MD-Buffer ინიციალიზაცია

გამოიყენება 128-ბიტიანი ბუფერული Hash ფუნქციის შუალედური და საბოლოო შედეგების შენახვისთვის. ბუფერული შეიძლება წარმოდგენილი იყოს როგორც ოთხი 32-ბიტიანი რეესტრი (A, B, C, D). ეს რეგისტრაცია ინიცირებულია შემდეგი თექვსმეტი ნომრებით:

A \u003d 01234567 B \u003d 89ABCDEF C \u003d FEDCBA98 D \u003d 76543210

ნაბიჯი 4: 512 ბიტიანი (16-ლირიკის) ბლოკების თანმიმდევრობის დამუშავება

ალგორითმის საფუძველია ოთხი ციკლური მკურნალობის მოდული, რომელიც ითვალისწინებს HMD5- ს. ოთხი ციკლი აქვს მსგავსი სტრუქტურა, მაგრამ თითოეული ციკლი იყენებს ელემენტარულ ლოგიკურ ფუნქციას, რომელიც აღწერილია F F, F G, F H და F I, შესაბამისად.

ნახაზი. 8.3.მომდევნო 512 ბიტიანი ბლოკის დამუშავება

თითოეული ციკლი იღებს, როგორც შეყვანის მიმდინარე 512 ბიტიანი ბლოკი Y Q, ამჟამად დამუშავებული და 128 ბიტიანი ღირებულება ABCD ბუფერული, რომელიც არის შუალედური დაიჯესტი ღირებულება, და ცვლის შინაარსი ამ ბუფერული. თითოეული ციკლი ასევე იყენებს 64-ელემენტის მაგიდის მეოთხე ნაწილს, რომელიც ეფუძნება ცოდვის ფუნქციას. I-TH ელემენტის t, აღინიშნება T [I], ტოლია მთელი ნაწილი 2 32 * ABS (SIN (I)), მე მითითებული radians. მას შემდეგ, რაც ABS (SIN (I)) არის რიცხვი 0-დან 1-მდე, თითოეული ელემენტის არის მთლიანი, რომელიც შეიძლება წარმოდგენილი იყოს 32 ბიტი. მაგიდა უზრუნველყოფს "შემთხვევითი" კომპლექტი 32 ბიტიანი ღირებულებები, რომლებიც უნდა აღმოფხვრას ნებისმიერი რეგულარულობა შეყვანის მონაცემებში.

MD Q + 1-ის მოსაპოვებლად, ოთხი ციკლის სარგებელი ჩამოყალიბებულია მოდულის 2 32 MD Q. გარდა ამისა, დამოუკიდებლად შესრულებულია ბუფერში ოთხი ოთხი სიტყვისთვის.

CLS S არის ციკლური ცვლა 32-ბიტიანი არგუმენტის მარცხენა მხარეს.

X [K] - M - K-O 32-bit სიტყვა Q-Ohm 512 შეტყობინება ბლოკი.

T [i] - i-o, 32-bit სიტყვა Matrix T.

+ - მოდულის დამატება 2 32.

ალგორითმის ოთხივე ციკლის შესახებ, გამოიყენება ოთხი ელემენტარული ლოგიკური ფუნქცია. თითოეული ელემენტარული ფუნქცია იღებს 32-ბიტიან სიტყვას შეყვანისას და გამომავალი ქმნის 32-ბიტიან სიტყვას. თითოეული ფუნქცია არის უამრავი Batch ლოგიკური ოპერაციების, I.E. NTH გამომავალი ცოტა ფუნქცია N-B ცოტა სამი შეყვანის. ელემენტარული ფუნქციები ასეთია:

32-ბიტიანი სიტყვების მასივი შეიცავს მიმდინარე 512 ბიტიანი შეყვანის ბლოკის ღირებულებას, რომელიც ამჟამად დამუშავებულია. თითოეული ციკლი 16-ჯერ გადის, ხოლო მას შემდეგ, რაც შეყვანის წერილის თითოეული ბლოკი დამუშავებულია ოთხ ციკლში, მაშინ თითოეული შეყვანის ერთეული დამუშავებულია დიაგრამაზე ნაჩვენები დიაგრამაზე. 4, 64 ჯერ. თუ თქვენ წარმოადგინოთ შეყვანის 512 ბიტიანი ბლოკი თექვსმეტი 32-ბიტიანი სიტყვის სახით, თითოეული შეყვანის 32-ბიტიანი სიტყვა გამოიყენება ოთხჯერ, ერთ დროს თითოეულ ციკლში, და მაგიდის თითოეული ელემენტი, რომელიც შედგება 64 32-ბიტიანი სიტყვები, გამოიყენება მხოლოდ ერთ დროს. ციკლის ყოველი ნაბიჯის შემდეგ, ციკლური გადანაწილება ოთხი სიტყვის მარცხნივ, B, C და D ხდება. ყოველი ნაბიჯი, მხოლოდ ერთი ოთხი სიტყვა ABCD ბუფერული ცვლილებების შესახებ. აქედან გამომდინარე, თითოეული ბუფერული სიტყვა განსხვავდება 16-ჯერ, შემდეგ კი მე -17 დრო დასასრულს ამ ერთეულის საბოლოო გამომუშავების მისაღებად.

დაიჯესტი.

2. სიჩქარე: ალგორითმის პროგრამის განხორციელება საკმაოდ სწრაფად უნდა შესრულდეს. კერძოდ, ალგორითმი უნდა იყოს სწრაფი საკმარისი 32-bit არქიტექტურა. აქედან გამომდინარე, ალგორითმი ეფუძნება 32-ბიტიანი სიტყვების ელემენტარულ ოპერაციებს.

3. სიმარტივე და კომპაქტურობა: ალგორითმი უნდა იყოს მარტივი აღწერილობა და მარტივი პროგრამა, დიდი პროგრამების ან ველური ბარათების გარეშე. ეს მახასიათებლები არა მარტო აშკარა პროგრამის სარგებელი, არამედ სასურველია უსაფრთხოების თვალსაზრისით, რადგან შესაძლო სუსტი წერტილების ანალიზისთვის უკეთესია, რომ მარტივი ალგორითმი.

4. სასურველია პატარა- ენდური არქიტექტურა: ზოგიერთი პროცესორი არქიტექტურა (მაგალითად, Intel 80xxxx Line) შეინახეთ სიტყვა Byte- ის ქვედა ბაიტი მისამართები (პატარა ენდური). სხვები (როგორიცაა Sun SPARCSTATATATATATION) შეინახეთ სიტყვა უმცროსი Byte მისამართების პოზიციაზე (დიდი MD4 დამატებითი მუდმივი მუდმივი მუდმივი პირველი ციკლი არ ვრცელდება. მსგავსი დამატებითი მუდმივი გამოიყენება თითოეული ნაბიჯისთვის მეორე ციკლში. კიდევ ერთი დამატებითი მუდმივი გამოიყენება მესამე ციკლის თითოეულ ნაბიჯზე.. Hash Code არის ფუნქცია თითოეული ბიტიდან შეყვანისგან. ელემენტარული ფუნქციების კომპლექსური გამეორება FF F, FG, FH და FI უზრუნველყოფს, რომ შედეგი კარგად არის შერეული; ანუ, ნაკლებად სავარაუდოა, რომ შანსი შერჩეული ორი შეტყობინება მაშინაც კი, თუ მათ აშკარად მსგავსი ნიმუშები აქვთ, იგივე დაიჯესტი, რომელიც ქმნის იმავე გამომავალ მნიშვნელობას. ეს იმას ნიშნავს, რომ MD5- ის აღსრულება 512 ბიტის ერთ ბლოკზე გამოიწვევს იგივე გამომავალი ABCD ბუფერში ორი განსხვავებული შეყვანის ღირებულებებისათვის. მიუხედავად იმისა, რომ ამ მეთოდის გაფართოების მეთოდი წარმატებული თავდასხმის MD5 არ არსებობს.