4.1 Giao thức TCP.
Giao thức TCP (Transmission Control Protocol - " Giao thức điều khiển truyền vận") là một trong các giao thức cốt lõi của bộ giao thức TCP/IP. Sử dụng TCP, các ứng dụng trên các máy chủ đƣợc nối mạng có thể tạo các "kết nối" với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin. Giao thức này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng thứ tự TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịch vụ Web và dịch vụ thƣ điện tử) đồng thời chạy trên cùng một máy chủ.
Trong bộ giao thức TCP/IP, TCP là tầng trung gian giữa giao thức IP bên dƣới và một ứng dụng bên trên. Các ứng dụng thƣờng cần các kết nối đáng tin cậy kiểu đƣờng ống để liên lạc với nhau, trong khi đó, giao thức IP không cung cấp những dòng kiểu đó, mà chỉ cung cấp dịch vụ chuyển gói tin không đáng tin cậy. TCP làm nhiệm vụ của tầng giao vận trong mô hình OSI đơn giản của các mạng máy tính.
Thiết lập kết nối
Để thiết lập một kết nối, TCP sử dụng một quy trình bắt tay 3 bƣớc (3-way handshake) Trƣớc khi client thử kết nối với một server, server phải đăng ký một cổng và mở cổng đó cho các kết nối: đây đƣợc gọi là mở bị động. Một khi mở bị động đã đƣợc thiết lập thì một client có thể bắt đầu mở chủ động. Để thiết lập một kết nối, quy trình bắt tay 3 bƣớc xảy ra nhƣ sau:
1. Client yêu cầu mở cổng dịch vụ bằng cách gửi gói tin SYN (gói tin TCP) tới
server, trong gói tin này, tham số sequence number đƣợc gán cho một giá trị ngẫu nhiên X.
54
2. Server hồi đáp bằng cách gửi lại phía client bản tin SYN-ACK, trong gói tin này, tham số acknowledgment number đƣợc gán giá trị bằng X + 1, tham số sequence number đƣợc gán ngẫu nhiên một giá trị Y
3. Để hoàn tất quá trình bắt tay ba bước, client tiếp tục gửi tới server bản tin ACK, trong bản tin này, tham số sequence number đƣợc gán cho giá trị bằng X + 1 còn tham số acknowledgment number đƣợc gán giá trị bằng Y + 1
Tại thời điểm này, cả client và server đều đƣợc xác nhận rằng, một kết nối đã đƣợc thiết lập.
Truyền dữ liệu
Một số đặc điểm cơ bản của TCP để phân biệt với UDP:
Truyền dữ liệu không lỗi (do có cơ chế sửa lỗi/truyền lại) Truyền các gói dữ liệu theo đúng thứ tự
Truyền lại các gói dữ liệu mất trên đƣờng truyền Loại bỏ các gói dữ liệu trùng lặp
Cơ chế hạn chế tắc nghẽn đƣờng truyền
Ở hai bƣớc đầu tiên trong ba bƣớc bắt tay, hai máy tính trao đổi một số thứ tự gói ban đầu (Initial Sequence Number -ISN). Số này có thể chọn một cách ngẫu nhiên. Số thứ tự này đƣợc dùng để đánh dấu các khối dữ liệu gửi từ mỗi máy tính. Sau mỗi byte đƣợc truyền đi, số này lại đƣợc tăng lên. Nhờ vậy ta có thể sắp xếp lại chúng khi tới máy tính kia bất kể các gói tới nơi theo thứ tự thế nào.
Trên lý thuyết, mỗi byte gửi đi đều có một số thứ tự và khi nhận đƣợc thì máy tính nhận gửi lại tin báo nhận (ACK). Trong thực tế thì chỉ có byte dữ liệu đầu tiên đƣợc gán số thứ tự trong trƣờng số thứ tự của gói tin và bên nhận sẽ gửi tin báo nhận bằng cách gửi số thứ tự của byte đang chờ.
55
Các cổng TCP
TCP sử dụng khái niệm số hiệu cổng (port number) để định danh các ứng dụng gửi và nhận dữ liệu. Mỗi đầu của một kết nối TCP có một số hiệu cổng (là số không dấu 16-bit) đƣợc gán cho ứng dụng đang nhận hoặc gửi dữ liệu. Các cổng đƣợc phân thành ba loại cơ bản: nổi tiếng, đƣợc đăng ký và động/cá nhân. Các cổng nổi tiếng đã đƣợc gán bởi tổ chức Internet Assigned Numbers Authority (IANA) và thƣờng đƣợc sử dụng bởi các tiến trình mức hệ thống hoặc các tiến trình của root. Ví dụ: FTP (21), TELNET (23), SMTP (25) và HTTP (80). Các cổng đƣợc đăng ký thƣờng đƣợc sử dụng bởi các ứng dụng ngƣời dùng đầu cuối (end user application) với vai trò các cổng phát tạm thời (khi dùng xong thì hủy đăng ký) khi kết nối với server, nhƣng chúng cũng có thể định danh các dịch vụ có tên đã đƣợc đăng ký bởi một bên thứ ba. Các cổng động/cá nhân cũng có thể đƣợc sử dụng bởi các ứng dụng ngƣời dùng đầu cuối, nhƣng không thông dụng bằng. Các cổng động/cá nhân không có ý nghĩa gì nếu không đặt trong một kết nối TCP. Có 65535 cổng đƣợc chính thức thừa nhận.
4.2 Xây dựng mô hình truyền dữ liệu qua wifi trên phần mềm GNU Radio. 4.2.1 Thiết lập máy chủ.
Hình 3.11 Sơ đồ thiết lập kết nối của máy chủ.
56
• Wav File Source: Lấy dữ liệu của tập tin âm thanh có định dạng Wav.
• Wx GUI FFT Sink: Mô tả phổ của tín hiệu âm thanh.
• Variable: Khai báo giá trị của tần số lấy mẫu.
• Throttle: Điều khiển tốc độ lấy mẫu.
• TCP Sink: Dùng để thiết lập đƣờng truyền. Các tham số trong khối TCP Sink:
Input Type: Kiểu dữ liệu đầu vào. Adrress: Địa chỉ IP máy của bạn. Port: Tên cổng dùng để kết nối.
Mode: Chế độ là máy chủ hay là khách.
Chƣơng trình sẽ không bắt đầu cho đến khi một kết nối TCP đƣợc thiết lập. Vì vậy, phổ tín hiệu không xuất hiện cho đến khi có máy khác kết nối thành công.
4.2.2 Thiết lập máy khách.
Hình 3.12 Sơ đồ thiết lập kết nối của máy khách.
Chức năng của các khối:
Variable: Thiết lập thông số của tần số lấy mẫu. Wx GUI FFT Sink: Mô tả phổ của tín hiệu âm thanh.
57
Audio Sink: Phát tín hiệu âm thanh trên loa của máy tính. Wav File Sink: Ghi tập tín hiệu âm thanh thành một tập tin mới. TCP Source: Thiết lập đƣờng truyền.
Các thông số trong khối TCP Source: Output Type: Kiểu dữ liệu đầu ra. Address: Địa chỉ IP của máy chủ
Port: Tên cổng của máy chủ đã thiết lập.
Mode: Chế độ, chọn Client.
Nếu kết nối TCP thất bại, chƣơng trình sẽ không chạy, và phổ tín hiệu sẽ không xuất hiện.
5 Mô hình thử nghiệm truyền thông tin bí mật qua wifi.
wifi
Hình 3.13 Mô hình thử nghiệm truyền thông tin bí mật qua wifi.
Trƣớc tiên chúng ta nhúng tập tin DHBK.text có nội dung là “ Dai Hoc Bach Khoa Ha Noi” vào tập tin GhiAm.wav đƣợc tập tin sau khi nhúng là: New_10-Jan-
2015_8_51.wav TCP Source Khóa bí mật Audio chứa thông tin bí mật Bộ tách dữ liệu Thông tin bí mật Bộ nhúng dữ liệu Audio gốc Thông tin bí mật Khóa bí mật Audio chứa thông tin bí mật TCP Sink
58
Truyền tập tin New_10_Jan_2015_8_51.wav qua mô hình truyền dữ liệu qua wifi.
Hình 3.14 Truyền tập tin New_10_Jan_2015_8_51.wav.
Bên thu nhận đƣợc tập tin wifi.wav.
Hình 3.15 Bênthu nhận đƣợc tập tin wifi.wav
Sau đó ta tách dữ liệu trong hai tập tin đƣợc kết quả nhƣ sau:
59
Hình 3.16 Kết quả tách thông tin bí mật từ tập tin New_10_Jan_2015_8_51.wav
Kết quả tách dữ liệu từ tập tin wifi.wav.
60
Nhận xét.
Sau khi truyền qua mô hình truyền nhận dữ liệu qua wifi dữ liệu đƣợc tách ra hoàn toàn giống với dữ liệu nhúng ban đầu.
5 Tóm tắt chương.
Chƣơng này phân tích thuật toán nhúng và tách dữ liệu trong âm thanh dự trên kỹ thuật mã hóa LSB, từ đó đã xây dựng đƣợc chƣơng trình nhúng dữ liệu trong âm thanh trên phần mềm Matlab. Ngoài ra còn xây dựng đƣợc mô hình truyền dữ liệu qua wifi và chạy thành công.
61
Chƣơng 4 Kết Luận.
Hiện nay nhúng (giấu) dữ liệu trên nền tín hiệu âm thanh là một bộ phận chiếm tỉ lệ lớn trong các chƣơng trình ứng dụng hệ thống nhúng dữ liệu trong đa phƣơng tiện bởi lƣợng dữ liệu đƣợc trao đổi bằng âm thanh là rất lớn và hơn nữa nhúng dữ liệu trên nền tín hiệu âm thanh cũng đóng vai trò hết sức trọng trong hầu hết các ứng dụng bảo vệ an toàn thông tin. Chính vì thế mà vấn đề này nhận đƣợc sự quan tâm rất lớn của các cá nhân, tổ chức, trƣờng đại học và nhiều viện nghiên cứu trên thế giới. Trong đồ án này tìm hiểu về:” Nhúng dữ liệu trên nền tín hiệu âm thanh dựa trên công nghệ định nghĩa bằng phần mềm”. Cụ thể đồ án đã đạt đƣợc các kết quả sau.
Những điều đạt được.
-Nghiên cứu về công nghệ vô tuyến đĩnh nghĩa bằng phần mềm và các ứng dụng. -Nghiên cứu cấu trúc tập tin âm thanh .wav.
-Tỉm hiểu kỹ thuật giấu tin trong audio cụ thể là kỹ thuật mã hóa LSB.
- Xây dựng và thực nghiệm thành công chƣơng trình nhúng dữ liệu dạng text trong tập tin âm thanh trên phần mềm Matlab 2009b.
-Xây dựng đƣợc mô hình thu, phát dữ liệu bằng wifi dựa trên công nghệ vô tuyến định nghĩa bằng phần mềm.
-Tập tin âm thanh sau khi đƣợc nhúng khi truyền qua mô hình thu, phát dữ liệu trên có thể tách đƣợc thông tin đã nhúng.
Những hạn chế.
-Phần mềm còn nhiều hạn chế mới nhúng đƣợc dữ liệu dạng text và tập tin âm thanh định dạng wav.
-Thuật toán nhúng còn đơn giản, thông tin dễ bị thay đổi, tổn thất do các kiểu tấn công thông thƣờng.
-Mô hình thu, phát còn hạn chế chỉ dụng đƣợc trong phạm vi hẹp.
62
-Xây dựng chƣơng trình hoàn thiện hơn, dữ liệu nhúng đa dạng hơn.
-Xây dựng thuật toán phức tạp hơn để dữ liệu bền vững trƣớc các kiểu tấn công.
-Xây dựng mô hình thu phát phức tạp hơn, có ứng dụng ở phạm vi rộng hơn. Vì thời gian nghiên cứu có hạn, trình độ hiểu biết của bản thân em còn nhiều hạn chế nên bài báo cáo của em không tránh khỏi những thiếu sót, em rất mong nhận đƣợc sự góp ý quý báu của tất cả các thầy cô giáo để báo cáo của em đƣợc hoàn thiện hơn.
63
Tài liệu tham khảo
[1] GNU Radio, http://www.gnu.org/software/gnuradio/.
[2] NGUYỄN THỊ HẠNH, “Thủy vân cơ sở dữ liệu quan hệ dựa trên kỹ thuật thối ưu hóa áp dụng thuật toán tìm kiếm theo mẫu”, Luận văn thạc sỹ khoa học máy tính. [3] http://www.mathworks.com/help/matlab/.
[4] Duc Toan Nguyen, “Implementation of OFDM systems using GNU Radio and USRP”, This thesis is presented as part of the requirements for the award of the Degree of Master by Research - Engineering from University of Wollongong.
[5] Nguyễn Văn Đức, “Lý thuyết về Kênh Vô Tuyến”, Nhà xuất bản Khoa Học và Kỹ Thuật, 2006.
[6] Prof. Samir Kumar, BandyopadhyayBarnali, Gupta Banik, “LSB Modification and Phase Encoding Technique of Audio Steganography Revisited”, Department of Computer Science and Engineering, University of Calcutta, Kolkata India. Department of Computer Science, St’ Thomas College of Engineering & Technology, Kolkata India [7] Kirti Gandhi, Gaurav Garg, “Modified LSB Audio Steganography Approach”, International Journal of Emerging Technology and Advanced Engineering.
[8] http://www.tenettech.com/product/3127/usrp-b210.
[9] Kamred Udham Singh, “LSB Audio Steganography Approach”, International Journal of Emerging Technology and Advanced Engineering .
Website: www.ijetae.com (ISSN 2250-2459, ISO 9001:2008 Certified Journal, Volume 4, Issue 4, April 2014).
[10] K.P.Adhiya, Swati A. Patil, “Hiding Text in Audio Using LSB Based
Steganography”, Information and Knowledge Management ISSN 2224-5758 (Paper) ISSN 2224-896X (Online)Vol 2, No.3, 2012.
64 Phụ Lục
Code phần mềm viết bằng Matlab.
function varargout = NhungDuLieu(varargin) % NHUNGDULIEU M-file for NhungDuLieu.fig
% NHUNGDULIEU, by itself, creates a new NHUNGDULIEU or raises the existing
% singleton*.
% H = NHUNGDULIEU returns the handle to a new NHUNGDULIEU or the handle to existing singleton*.
%
% NHUNGDULIEU('CALLBACK',hObject,eventData,handles,...) calls the local function named CALLBACK in NHUNGDULIEU.M with the given input arguments. % NHUNGDULIEU('Property','Value',...) creates a new NHUNGDULIEU or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before audiostegano_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application % stop. All inputs are passed to NhungDuLieu_OpeningFcn via varargin. %
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help NhungDuLieu % Last Modified by GUIDE v2.5 01-Jan-2015 19:54:27
% Begin initialization code - DO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @NhungDuLieu_OpeningFcn, ...
'gui_OutputFcn', @NhungDuLieu_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT
% --- Executes just before NhungDuLieu is made visible.
function NhungDuLieu_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
65
% Choose default command line output for NhungDuLieu handles.output = hObject; handles.fname=''; handles.pname=''; set(handles.pushbutton2,'enable','off'); set(handles.txt1,'string',''); guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = NhungDuLieu_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure
varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); end
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) value1=get(handles.radiobutton1,'value');
value2=get(handles.radiobutton2,'value'); if value1==1
[handles.fname, handles.pname] = uigetfile('*.wav','Chon File'); set(handles.pushbutton2,'enable','on');
set(handles.pushbutton1,'enable','off'); set(handles.txt1,'string','Nhung Du Lieu');
guidata(hObject, handles); %Cập nhật cấu trúc xử lý.
end
if value2==1
mke=get(handles.edit5,'string');% Lấy mật khẩu if length(mke)==0
msgbox('Vui Long Nhap Mat Khau','Thong Bao','error'); else
if length(mke)>8
msgbox('Mat Khau Nhieu Hon 8 Ky Tu. Vui Long Nhap Lai','Thong Bao','error');
else
66 mke_num=double(mke);
mke_binvec=dec2binvec(mke_num,8); set(handles.pushbutton2,'enable','off');
set(handles.txt1,'string','Khoi Phuc Du Lieu');
[filename, pathname] = uigetfile('*.wav','Chon File'); [y,fs,nbits,opts]=wavread([pathname filename],[1 2]);
%Mở tập tin âm thanh đã nhúng dữ liệu.
fid1=fopen([pathname filename],'r'); header=fread(fid1,40,'uint8=>char'); data_size=fread(fid1,1,'uint32');
%Đọc mẫu dữ liệu của của tập tin âm thanh
[dta,count]=fread(fid1,inf,'uint16');
%đóng tập tin âm thanh, chỉ mẫu dữ liệu wav được trích xuất để tách lấy
dữ liệu.
fclose(fid1);
lsb=1;
identity=bitget(dta(1:8),lsb)'; %chuỗi nhận dạng tập tin đã được nhúng hay chưa
if identity==mke_binvec
%Lấy chiều dài của thông tin mật từ mẫu thứ 9 đến 28.
len_bin=zeros(20,1); m_bin=zeros(10,1); n_bin=zeros(10,1); m_bin(1:10)=bitget(dta(9:18),lsb); n_bin(1:10)=bitget(dta(19:28),lsb);
%chuyển độ dài sang hệ thập phân.
m=bi2de(m_bin'); n=bi2de(n_bin'); len=m*n*8;
secmsg_bin=zeros(len,1);
%Lấy thông tin mật từ mẫu dữ liệu thứ 29 cho tới hết chiều dài thông
tin mật
secmsg_bin(1:len)=bitget(dta(29:28+len),lsb); secmsg_bin_re=reshape(secmsg_bin,len/8,8);
secmsg_double=bi2de(secmsg_bin_re); %Chuyển sang hệ thập phân
secmsg=char(reshape(secmsg_double,m,n)); %chuyển sang kiểu ký tự
set(handles.edit2,'string',secmsg); % hiển thị thông tin được tách ra trên
set(handles.edit5,'string','');
else
msgbox('File Chua Duoc Nhung Du Lieu Hoac Mat Khau Khong Dung.','Thong Bao','error');
end end end end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO)
67
% handles structure with handles and user data (see GUIDATA) set(handles.pushbutton1,'enable','on'); msg=get(handles.edit1,'string'); mkh=get(handles.edit5,'string'); curtime = clock(); curfilename = strcat (date(),'_',num2str(curtime(4)),'_',num2str(curtime(5)),'.wav'); if (length(msg)==0||length(mkh)==0);
msgbox('Vui Long Nhap Du Lieu Can Nhung Va Mat Khau','Thong Bao','error');
else
if length(mkh)>8
msgbox('Mat Khau Nhieu Hon 8 Ky Tu. Vui Long Nhap Lai','Thong Bao','error'); else mkh_num=double(mkh); mkh_binvec=dec2binvec(mkh_num,8); [y,fs,nbits,opts]=wavread([handles.pname handles.fname],[1 2]); %Mở tập tin âm thanh đã nhúng thông tin mật.
fid1=fopen([handles.pname handles.fname],'r');
%40 byte đầu tiên là dữ liệu khởi tạo của file âm thanh header=fread(fid1,40,'uint8=>char');
%data_size=fread(fid1,1,'uint32');
%sao chép các mẫu dữ liệu 16 bit bắt đầu từ byte thứ 44 [dta,count]=fread(fid1,inf,'uint16');
%đo
fclose(fid1); lsb=1;
msg=get(handles.edit1,'string'); %lấy thông tin mật cần nhúng từ
edittext
[ro,co]=size(msg);
if ( (ro*co*8+28) > count )
msgbox('Dung Luong File Qua Lon, Chon File Co Dung Luong Nho Hon','Canh