Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (244.17 KB, 39 trang )
An ton v bo mt thụng tin
30
Cần tìm: hoặc P1, P 2,... Pi; k; hoặc một thuật toán để nhận đợc Pi+1 từ
Ci+1=Pk(Pi+1)
2.Biết bản rõ (Known-plaintext attack).
Ngời thám mã không chỉ biết bản mã của một vài thông điệp mà còn biết cả
bản rõ của những thông điệp này. Công việc của ngời thám mã là tìm ra khoá (hoặc
các khoá) đợc sử dụng để mã hoá các thông điệp hoặc thuật toán để giải mã bất kỳ
một thông điệp mới nào đợc mã hoá bằng khoá đó.
Đầu vào: P1, C1=Ek(P1), P2, C2=Ek(P2),... Pi, Ci=Ek(Pi)
Cần tìm: hoặc k, hoặc một thuật toán để nhận đợc Pi+1 từ Ek(Pi+1)
3. Lựa chọn bản rõ (Chosen-plaintext attack).
Ngời thám mã không chỉ phân tích bản mã mà còn đợc kết hợp với bản rõ
của một vài thông điệp, nhng các bản rõ không là tuỳ ý mà do ngời thám mã phải
lựa chọn. Trờng hợp này tốt hơn trờng hợp (2) đối với ngời thám mã, bởi vì ngời
thám mã có thể chọn khối bản rõ đặc trng để giải mã, nó có thể mang lại nhiều
thông tin về khoá. Công việc của ngời thám mã là tìm khoá (hoặc các khoá) đợc sử
dụng để mã hoá các thông điệp hoặc một thuật toán để giải mã bất cứ thông điệp đã
đợc mã hoá mới nào bằng các khoá đó.
Đầu vào: P1, C1=Ek(P1), P2, C2=Ek(P2),... Pi, Ci=Ek(Pi), ngời thám mã đợc chọn
P1, P2,... Pi
Cần tìm: hoặc k, hoặc một thuật toán để nhận đợc Pi+1 từ Ci+1=Ek(Pi+1)
4. Lựa chọn bản rõ thích hợp (Adaptive-chose-plaintext attack).
Đây là một trờng hợp đặc biệt của trờng hợp bản rõ đợc lựa chọn. Ngời thám mã
không chỉ có thể đợc lựa chọn bản rõ mà nó đã đợc mã hoá, mà họ còn có thể biến
đổi những điểm cần thiết dựa trên kết quả của những lần mã hoá trớc. Với trờng
hợp bản rõ đợc lựa chọn, ngời thám mã có thể lựa chọn một khối bản rõ lớn để giải
mã; trong trờng hợp bản rõ đợc lựa chọn thích hợp họ có thể lựa chọn một khối bản
rõ nhỏ hơn sau đó lựa chọn khối khác dựa vào kết quả của khối đầu tiên, v.v...
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
31
5. Lựa chọn bản mã (Chosen-plaintext attack).
Ngời thám mã có thể chọn trong các bản mã khác nhau và biết đợc bản rõ.
Công việc của ngời thám mã là tìm khoá.
Đầu vào: C1, P1=Dk(C1), C2, P2=Dk(C2),... Ci, Pi=Dk(Ci)
Cần tìm: k
6. Lựa chọn khoá (Chosen-Key).
Ngời thám mã biết phơng pháp mã hoá Ek và cố tìm phơng pháp giải mã tơng
ứng Dk trớc khi nhận bất cứ mẫu bản mã nào. Trong trờng hợp này ngời thám mã
có rất nhiều thời gian để làm việc.
Trờng hợp (5), (6) thờng đợc ứng dụng chủ yếu đối với các hệ thống mã hoá sử
dụng khoá công khai.
Một điểm đáng chú ý khác là đa số các kỹ thuật thám mã đều dùng phơng pháp
thống kê tần suất xuất hiện của các từ, các ký tự trong bản mã. Sau đó thực hiện
việc thử thay thế với các chữ cái có tần suất xuất hiện tơng đồng trong ngôn ngữ tự
nhiên. Tại đây chúng ta chỉ xem xét đối với ngôn ngữ thông dụng nhất hiện nay đó
là tiếng Anh. Việc thống kê tần suất xuất hiện của các ký tự trong trờng hợp này đợc tiến hành dựa trên các bài báo, sách, tạp chí và các văn bản cùng với một số loại
khác ...
Sau đây là bảng thống kê tần suất xuất hiện của 26 chữ cái trong bảng chữ cái tiếng
Anh theo tài liệu của Beker và Piper.
Ký tự
A
B
C
D
E
F
G
H
Xác Suất
0.082
0.015
0.028
0.043
0.127
0.022
0.020
0.061
Ký tự
J
K
L
M
N
O
P
Q
Xác suất
0.002
0.008
0.040
0.024
0.067
0.075
0.019
0.001
Ký tự
S
T
U
V
W
X
Y
Z
Xác suất
0.063
0.091
0.028
0.010
0.023
0.001
0.020
0.001
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
I
0.070
32
R
0.060
Cùng với việc thống kê các tần xuất của các ký tự trong tiếng Anh, việc thống kê
tần suất xuất hiện thờng xuyên của các dãy gồm 2 hoặc 3 ký tự liên tiếp nhau cũng
có một vai trò quan trọng trong công việc thám mã. Sysu Deck đa ra 30 bộ đôi xuất
hiện thờng xuyên của tiếng Anh đợc sắp theo thứ tự giảm dần nh sau :
Tính hữu dụng của các phép thống kê ký tự và các dãy ký tự đợc ngời phân tích mã
khai thác triệt để trong những lần thám mã. Khi thực hiện việc thám mã ngời phân
tích thống kê các ký tự trong bản mã, từ đó so sánh với bản thống kê mẫu và đa ra
các ký tự phỏng đoán tơng tự. Phơng pháp này đợc sử dụng thờng xuyên và đem lại
hiệu quả khá cao.
Cặp chữ
TH
HE
IN
ER
RE
ON
AN
EN
AT
ES
Tần suất
10.00
9.50
7.17
6.65
5.92
5.70
5.63
4.76
4.72
4.24
Cặp chữ
ED
TE
TI
OR
ST
AR
ND
TO
NT
IS
Tần suất
4.12
4.04
4.00
3.98
3.81
3.54
3.52
3.50
3.44
3.43
Cặp chữ
OF
IT
AL
AS
HA
NG
CO
SE
ME
DE
Tần suất
3.38
3.26
3.15
3.00
3.00
2.92
2.80
2.75
2.65
2.65
Phần iii: cài đặt một số thuật toán
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
33
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class mahoa extends JFrame implements ActionListener
{
Public String[]a = new String[]{"a","b","c","d","e","f","g","h","i","j","k","l","m"
,"n","o","p","q","s","r","t","u","v","x","y","z","w"};
public String[]code=new String[62];
public String xauma=new String();
public String banma=new String();
JTextArea t1=new JTextArea(5,5);
JLabel l1=new JLabel("chua ma");
JButton[] b=new JButton[]{new JButton("ma vong"),new JButton("ma
hemiaffine"),new JButton("ma tt"),new JButton("ma vigenere"),new JButton("ma
ts")};
JButton[] g=new JButton[]{new JButton("gma vong"),new JButton("gma
hemiaffin"),new
JButton("gma
tt"),new
JButton("gma
vigenere"),new
JButton("gma ts")};
public mahoa()
{
setLayout(new FlowLayout());
add(t1);
add(l1);
for(int i=0;i
{
b[i].addActionListener(this);
add(b[i]);
g[i].addActionListener(this);
add(g[i]);
}
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
34
}
public String mavong(int k)
{
String xauma=t1.getText();
System.out.println("xau ma la: "+xauma);
int l=xauma.length();
String t;
String kq = "";
System.out.println("5%2"+5%2);
for(int i=0;i
{
t=xauma.substring(i,i+1);
for(int j=0;j<26;j++)
{
if(t.compareTo(a[j])==0)
{
kq=kq+a[j+k];
}
}
}
System.out.println("xau ma la: "+kq);
l1.setText("Xau ma la: "+kq);
banma=kq;
return kq;
}
public String hemiaffin(int a1,int b1)
{
String xauma=t1.getText();
System.out.println("xau ma la: "+xauma);
int l=xauma.length();
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
35
String t;
String kq ="";
for(int i=0;i
{
t=xauma.substring(i,i+1);
for(int j1=0;j1<26;j1++)
{
if(t.compareTo(a[j1])==0)
{
int j=(a1*j1+b1)%26;
kq=kq+a[j];
}
}
}
//System.out.println("xau ma la: "+kq);
l1.setText("Xau ma la: "+kq);
banma=kq;
return kq;
}
public String ghemiaffin(int a1,int b1)
{
String xauma=banma;
System.out.println("xau ma la: "+xauma);
int l=xauma.length();
String t;
String kq ="";
for(int i=0;i
{
t=xauma.substring(i,i+1);
for(int j1=0;j1<26;j1++)
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
36
{
if(t.compareTo(a[j1])==0)
{
int j = 0;
System.out.println(j1);
int c=tinhx(a1,b1,j1);
if(c!=-1)
{
j=c;
}
System.out.println(j);
kq=kq+a[j];
}
}
}
System.out.println("xau ma la: "+kq);
l1.setText("Xau ma la: "+kq);
return kq;
}
public int tinhx(int a, int b,int j)
{
int x=-1;
int m=(25*a-j+b)/26;
for(x=0;x<26;x++)
for(int k=0;k<=25;k++)
{
if((a*x-26*k==(j-b)))
{
System.out.println("x tim duoc la:"+x);
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
37
return x;
}
}
return x;
}
public String thaythe(int n,int[] r)
{
String xauma=t1.getText();
System.out.println("xau ma la: "+xauma);
int l=xauma.length();
String kq ="";
int d=0;
while(l>d)
{
int j=r[d%n]+((int) Math.floor((double) d/n))*n;
System.out.println(j);
kq=kq+xauma.substring(j,j+1);
d++;
}
l1.setText("Xau ma la: "+kq);
banma=kq;
return kq;
}
public String gthaythe(int n,int[] r)
{
String xauma=banma;
System.out.println("xau ma la: "+xauma);
int l=xauma.length();
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
38
String[] tg=new String[l];
String kq ="";
int d=0;
while(l>d)
{
int j=r[d%n]+((int) Math.floor((double) d/n))*n;
System.out.println(j);
tg[j]=xauma.substring(d,d+1);
d++;
}
for(int j=0;j
{
kq=kq+tg[j];
}
l1.setText("Xau ma la: "+kq);
banma=kq;
return kq;
}
public String vigenere(String k)
{
String xauma=t1.getText();
int lx=xauma.length();
int l=k.length();
int r[]=new int[l];
int m = 0;
String kq ="";
for(int i=0;i
{
String t=k.substring(i,i+1);
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
39
for(int j=0;j<26;j++)
if(t.compareTo(a[j])==0)
{
r[i]=j;
}
}
for(int i=0;i
{
String t=xauma.substring(i,i+1);
for(int j=0;j<26;j++)
if(t.compareTo(a[j])==0)
{
m=j;
}
int ma=(m+r[i%l])%26;
kq=kq+a[ma];
}
l1.setText("Xau ma la: "+kq);
banma=kq;
return kq;
}
public String gvigenere(String k)
{
String xauma=banma;
int lx=xauma.length();
int l=k.length();
int r[]=new int[l];
String kq ="";
for(int i=0;i
{
Nguyn Th Thu Hin - TK6LC1
An ton v bo mt thụng tin
40
String t=k.substring(i,i+1);
for(int j=0;j<26;j++)
if(t.compareTo(a[j])==0)
{
r[i]=j;
}
}
int m = 0;
for(int i=0;i
{
String t=xauma.substring(i,i+1);
for(int j=0;j<26;j++)
if(t.compareTo(a[j])==0)
{
m=j;
System.out.println("ma cua kt la:"+m);
}
int ma=(m-r[i%l])%26;
kq=kq+a[ma];
}
l1.setText("Xau ma la: "+kq);
return kq;
}
public String tusinh(int k)
{
String xauma=t1.getText();
int l=xauma.length();
String kq="";
int[] m = new int[l];
Nguyn Th Thu Hin - TK6LC1