You are on page 1of 58

BAN CƠ YẾU CHÍNH PHỦ

HỌC VIỆN KỸ THUẬT MẬT MÃ

***

BÁO CÁO

THỰC TẬP CƠ SỞ CHUYÊN NGÀNH

Đề Tài 39: Nghiên cứu, phát triển app chat secure android

Giáo viên hướng dẫn: Lê Bá Cường

Sinh viên thực hiện: Đỗ Văn Thực

Nguyễn Minh Đức Anh

Lê Thị Quỳnh
MỤC LỤC

NHẬN XÉT..............................................................................................................3
LỜI CẢM ƠN...........................................................................................................4
DANH MỤC HÌNH VẼ...........................................................................................5
DANH MỤC TỪ VIẾT TẮT...................................................................................6
CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ ĐỀ TÀI...................................................8
1.1. Tính cấp thiết của đề tài..................................................................................8
1.2. Mục tiêu nghiên cứu của đề tài.......................................................................8
1.3. Đối tượng và phạm vi nghiên cứu..................................................................9
1.4. Các nhiệm vụ chính cần thực hiện.................................................................9
1.5. Kết quả dự kiến..............................................................................................9
1.6. Phương pháp và công cụ nghiên cứu..............................................................9
1.7. Tổng kết chương I........................................................................................10
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT.......................................................................11
2.1. Lập trình Android.........................................................................................11
2.2. lập trình Java Spring.....................................................................................17
2.3. Cơ bản về giao thưc websocket....................................................................21
2.4. Công nghệ bảo mật SSL/TLS.......................................................................24
2.5. Kiến trúc End to end encryption...................................................................28
2.6. Tổng kết chương...........................................................................................36
CHƯƠNG III. PHÁT TRIỂN ỨNG DỤNG SECURE CHAT..............................37
3.1. Khảo sát hệ thống ứng dụng Chat................................................................37
3.2. Phân tích hệ thống chat.................................................................................38
3.3. Phân tích giải pháp áp dụng công nghệ bảo mật..........................................40
3.4. Thiết kế hệ thống chat..................................................................................44
3.5. Triển khai thử nghiệm tính năng của ứng dụng............................................53
3.6. Tổng kết chương...........................................................................................58
1. NHẬN XÉT

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

......................................................................................................

Chữ ký của giảng viên


2. LỜI CẢM ƠN

Để hoàn thành đề tài này nhóm chúng em đã nhận được sự hỗ trợ, giúp đỡ
của thầy Lê Bá Cường. Với tình cảm sâu sắc, chân thành, cho phép nhóm được bày
tỏ lòng biết ơn sâu sắc đến thầy đã tạo điều kiện giúp đỡ trong quá trình học tập và
nghiên cứu đề tài.
Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế của một học
viên, ứng dụng này không thể tránh được những thiếu sót. Chúng em rất mong
nhận được sự chỉ bảo, đóng góp ý kiến của các thầy cô để có điều kiện bổ sung,
nâng cao khả năng, phục vụ tốt hơn công tác thực tế sau này.
Chúng em xin chân thành cảm ơn!
3. DANH MỤC HÌNH VẼ

Hình 1. Cấu trúc stack của hệ thống android...........................................................13


Hình 2. Kiến trúc của Spring Framework...............................................................19
Hình 3. Hoạt động của websocket...........................................................................22
Hình 4. Cấu trúc của SSL........................................................................................27
Hình 5. Minh họa mã hóa E2E................................................................................29
Hình 6. Quy trình mã hóa End to End.....................................................................31
Hình 7. Sơ đồ tổng quan hệ thống...........................................................................39
Hình 8. Biểu đồ phân rã chức năng hệ thống..........................................................40
Hình 9. Các khối chức năng trong hệ thống............................................................45
Hình 10. Biểu đồ diagram.......................................................................................46
Hình 11. Form đăng nhập, Form Password............................................................48
Hình 12. Form nhập mã OTP, Form dashboard......................................................49
Hình 13. Form đăng ký............................................................................................50
Hình 14. Form danh bạ............................................................................................51
Hình 15. Form conversation....................................................................................52
Hình 16. Form trang cá nhân...................................................................................53
Hình 17. Đăng nhập xác thực mã OTP....................................................................54
Hình 18. Tin nhắn gửi mã OTP về điện thoại.........................................................55
Hình 19. Cuộc trò chuyện........................................................................................56
Hình 20. Bảng cơ sở dữ liệu tin nhắn......................................................................57
Hình 21. Kết quả trên Wireshark.............................................................................58
4. DANH MỤC TỪ VIẾT TẮT

2D/3D 2/3-Dimensional
ADT Android Development Tools
AES Advanced Encryption Standard
AOP Aspect-Oriented
AOP Aspect oriented programming
API Application Program Interface
ARM Advanced RISC Machine
DAO Data Access Object
E2EE End to end encryption
EJB Enterprise Java Beans
FTP File Transfer Protocol
HTTP HyperText Transfer Protocol
IDE Integrated Development Environment
IETF Internet Engineering Task Force
IMAP Internet Message Access Protocol
JNDI Java Naming and Directory Interface
JSP Java Server Page
JWT JSON Web Token
MVC Model-View-Controller
ORM Object Relational Mapping
QEMU Quick EMUlator
RSA Rivest, Shamir, Adleman
SDK Software Development Kit
SGL Simple Graphics Language
SMS Short Message Service
SQL Structured Query Language
SSL/TLS Secure Sockets Layer/ Transport Layer Security
SYN Synchronize
TCP Transmission Control Protocol
URL Uniform Resource Locator
1. CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ ĐỀ TÀI

4.1. Tính cấp thiết của đề tài

Hiện nay, xã hội ngày càng phát triển theo xu hướng toàn cầu hóa, việc trao
đổi thông tin giữa những cá nhân, tổ chức, doanh nghiệp với nhau là rất cần thiết,
hàng ngày có hàng trăm tỉ tin nhắn được gửi qua lại để truyên thông tin. Mọi người
đang cần một phương tiện để thực hiện việc đó một cách dễ dàng hơn. Vì vậy
người dùng luôn muốn hướng tới một ứng dụng trò chuyện tiện lợi, dễ dàng sử
dụng và đáp ứng các yêu cầu khác nhau của các đối tượng người dùng.Và hiện tại
việc sở hữu những chiếc smartphone là rất phổ biến và theo nghiên cứu của
Gartner (công ty nghiên cứu và tư vấn hàng đầu thế giời) đã công bố số lượng
người sử dùng điện thoại hệ điều hành Android gấp 6 lần iOS và chiến 85% thị
phần toàn ngành. Vậy nên việc xây dựng một ứng dụng trò chuyện bằng hệ điều
hành Android là rất cần thiết.
Bên cạnh đó, các vấn đề liên quan đến riêng tư cá nhân, bảo mật công nghệ
càng ngày càng trở nên phức tạp và nghiêm trọng, người dùng cũng dần nhận thức
được tầm quan trọng của vấn đề này. Việc tin tặc tấn công và sử dụng dữ liệu
người dùng, nội dung tin nhắn trái phép cũng đang xảy ra trên một vài ứng dụng
chat nhiều người đang dùng. Do đó người dùng đang tìm kiếm các ứng dụng có độ
bảo mật cao.
Nhận thấy nhu cầu người dùng như vậy, chúng tôi chọn đề tài “Nghiên cứu
phát triển Secure chat application trên Android”.
4.2. Mục tiêu nghiên cứu của đề tài
Nghiên cứu xây dựng ứng dựng trò chuyện trên nền tảng Android với độ bảo
mật cao.
4.3. Đối tượng và phạm vi nghiên cứu
Đối tượng: Secure chat application
Phạm vi: Nghiên cứu phát triển ứng dụng nhắn tin bảo mật trên android.
4.4. Các nhiệm vụ chính cần thực hiện
Nội dung nghiên cứu được tập trung vào các nội dung chính như sau:
 Khảo sát tổng hợp kiến thức về lập trình android, lập trình java spring
boot.
 Nghiên cứu cơ sở lý thuyết về bảo mật dữ liệu, công nghệ bảo mật
SSL/TLS, kiến trúc E2EE
 Nghiên cứu xây dựng ứng dụng trò chuyện thời gian thực.
 Nghiên cứu giải pháp tích hợp công nghệ bảo mật SSL/TLS và kiến trúc
E2EE.
4.5. Kết quả dự kiến
Hoàn thành ứng dụng trò chuyện với độ bảo mật đáng tin cậy. Từ đó tiến
hành thực nghiệm, đánh giá và so sánh ứng dụng xây dựng được.
4.6. Phương pháp và công cụ nghiên cứu
 Xây dựng ứng dụng Chat trên android sử dụng Java Android, Android
SDK, Retrofit, Butter Knife.
 Sử dụng framework Java Spring Boot, cùng giao thức truyền dữ liệu
Websocket để xây dựng máy chủ.
Áp dụng công nghệ bảo mật SSL/TLS, phương thức mã hòa đầu cuối End-
To-End Encryption để mã hóa hệ thống giao tiếp.
4.7. Tổng kết chương I
Kết thúc chương một nắm bắt được tính cấp thiết của đề tài, mục tiêu đã đề
ra thực hiện phát triển theo đúng mục tiêu dựa trên các phương pháp và công cụ
được lựa chọn
5. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
5.1. Lập trình Android
5.1.1. Giới thiệu hệ điều hành android
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho
các thiết bị di động có màn hình cảm ứng ví dụ như điện thoại thông minh và máy
tính bảng. Ban đầu, Android được phát triển bởi Android, Inc. với sự hỗ trợ tài
chính từ Google và sau này được chính Google mua lại vào năm 2005
5.1.2. Lịch sử phát triển android
Android, Inc. được thành lập tại Palo Alto, California vào tháng 10 năm
2003 bởi Andy Rubin ,  Rich Miner , Nick Sears, và Chris White 
Google mua lại Android, Inc. vào ngày 17 tháng 8 năm 2005, biến nó thành
một bộ phận trực thuộc Google. Bắt đầu nuôi ý tưởng sản xuất điện thoại di động
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở (Open Handset
Alliance),được thành lập với hơn 80 công ty trong lĩnh vực kỹ thuật điện tử bao
gồm các công ty chuyên về phần cứng, phân phối thiết bị di động đến các công ty
phần mềm, sản xuất chất bán dẫn… Với mục đích phát triển các tiêu chuẩn mở cho
thiết bị di động. Cùng ngày Android cũng được ra mắt với vai trò là sản phẩm đầu
tiên của Liên minh, một nền tảng thiết bị di động được xây dựng trên nhân
Linux phiên bản 2.6. 
Chiếc điện thoại chạy Android đầu tiên được bán ra là HTC Dream, phát
hành ngày 22 tháng 10 năm 2008
Từ năm 2008, Android đã trải qua nhiều lần cập nhật để dần dần cải tiến hệ
điều hành, bổ sung các tính năng mới và sửa các lỗi trong những lần phát hành
trước
5.1.3. Kiến trúc của Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành
Android. Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây.
Hình 1. Cấu trúc stack của hệ thống android
5.1.4. Application framework
Các ứng dụng cho Android được phát triển bằng ngôn ngữ Java sử dụng Bộ
phát triển phần mềm Android SDK. SDK bao gồm một bộ đầy đủ các công cụ
dùng để phát triển, gồm có công cụ gỡ lỗi, thư viện phần mềm, bộ giả lập điện
thoại dựa trên QEMU, tài liệu hướng dẫn, mã nguồn mẫu, và hướng dẫn từng
bước. Môi trường phát triển tích hợp IDE được hỗ trợ chính thức là Eclipse sử
dụng phần bổ sung Android Development Tools. Các công cụ phát triển khác cũng
có sẵn, gồm có Bộ phát triển gốc dành cho các ứng dụng hoặc phần mở rộng viết
bằng C hoặc C++, Google App Inventor, một môi trường đồ họa cho những nhà
lập trình mới bắt đầu, và nhiều nền tảng ứng dụng web di động đa nền tảng phong
phú.
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các
nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà
phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập,
các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh
trạng thái, và nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử
dụng bởi các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa
việc sử dụng lại các thành phần; bất kỳ ứng dụng nào cũng có thể xuất bản khả
năng của mình và ứng dụng nào khác sau đó có thể sử dụng những khả năng (có
thể hạn chế bảo mật được thực thi bởi khuôn khổ). Cơ chế này cho phép các thành
phần tương tự sẽ được thay thế bởi người sử dụng.
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
 Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để
thiết kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,…
 Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu
từ các ứng dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các
ứng dụng đó.
 Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không
phải là mã nguồn, chẳng hạn như: localized strings, graphics, and layout files.
 Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các
custom alerts trong status bar.
Activity Manager được dùng để quản lý chu trình sống của ứng dụng và điều
hướng các activity.
5.1.5. Library trong android
Android bao gồm một tập hợp các thư viên C/C++ được sử dụng bởi nhiều
thành phần khác nhau trong hệ thống Android. Điều này được thể hiện thông qua
nền tảng ứng dụng Android. Một số các thư viện cơ bản được liệt kê dưới đây:
- System C library: Thư viện tiêu chuẩn C (C standard library - libc) có thể
coi là trái tim của các ứng dụng Linux, bao gồm các hàm tiêu chuẩn từ cơ bản từ
mở một file, thao tác string hay đến việc gọi system call xuống Linux kernel.
- Media Libraries – Dựa trên cơ sở PacketVideo's OpenCORE; thư viện hỗ
trợ phát lại và ghi lại nhiều định dạng âm thanh và video phổ biến cũng như những
tệp ảnh tĩnh bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG, và PNG.
- Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị.
- LibWebCore – Một công cụ trình duyệt web hiện đại có thể sử dụng cho
cả trình duyệt android và một khung nhìn web nhúng
- SGL – Công cụ đồ họa 2D cơ bản
- 3D libraries – triển khai dựa trên OpenGL ES 1.0 APIs; các thư viện hoặc
sử dụng tăng tốc phần cứng 3D (nếu có) hoặc bao gồm rasterizer phần mềm 3D
được tối ưu hóa cao
- SQLite – Bộ công cụ cơ sở dữ liệu mạnh mẽ và chiếm ít dung lượng có sẵn
cho các ứng dụng
5.1.6. Linux kernel

Android có một kernel dựa trên nhân Linux phiên bản 2.6, kể từ Android 4.0
Ice Cream Sandwich trở về sau, là phiên bản 3.x, với middleware, thư viện và API
viết bằng C, còn phần mềm ứng dụng chạy trên một nền tảng ứng dụng gồm các
thư viện tương thích với Java dựa trên Apache Harmony.

Android sử dụng máy ảo Dalvik với một trình biên dịch động để chạy 'mã
DEX’ (Dalvik Executable) của Dalvik, thường được biên dịch sang Java bytecode.
Nền tảng phần cứng chính của Android là kiến trúc ARM. Người ta cũng hỗ trợ
x86 thông qua dự án Android x86, và Google TV cũng sử dụng một phiên bản x86
đặc biệt của Android.

Một số tính năng cũng được Google đóng góp ngược vào nhân Linux, đáng
chú ý là tính năng quản lý nguồn điện có tên wakelock, nhưng bị những người lập
trình chính cho kernel từ chối vì họ cảm thấy Google không có định sẽ tiếp tục bảo
trì đoạn mã do họ viết. Google thông báo vào tháng 4 năm 2010 rằng họ sẽ thuê hai
nhận viên để làm việc với cộng đồng nhân Linux, nhưng Greg KroahHartman,
người bảo trì nhân Linux hiện tại của nhánh ổn định, đã nói vào tháng 12 năm
2010 rằng ông ta lo ngại rằng Google không còn muốn đưa những thay đổi của
mình vào Linux dòng chính nữa.

Một số lập trình viên Android của Google tỏ ý rằng "nhóm Android thấy
chán với quy trình đó" vì nhóm họ không có nhiều người và có nhiều việc khẩn cấp
cần làm với Android hơn.

Vào tháng 8 năm 2011, Linus Torvalds rằng "rốt cuộc thì Android và Linux
cũng sẽ trở lại với một bộ nhân chung, nhưng điều đó có thể sẽ không xảy ra trong
4 hoặc 5 năm nữa".
Vào tháng 12 năm 2011, Greg Kroah-Hartman thông báo kích hoạt Dự án
Dòng chính Android, nhắm tới việc đưa một số driver, bản vá và tính năng của
Android ngược vào nhân Linux, bắt đầu từ Linux 3.3. Linux cũng đưa tính năng
autosleep (tự nghỉ hoạt động) và wakelocks vào nhân 3.5, sau nhiều nỗ lực phối
trộn trước đó.
Tương tác thì vẫn vậy nhưng bản hiện thực trên Linux dòng chính cho phép
hai chế độ nghỉ: bộ nhớ (dạng nghỉ truyền thống mà Android sử dụng), và đĩa (là
ngủ đông trên máy tính để bàn). Việc trộn sẽ hoàn tất kể từ nhân 3.8, Google đã
công khai kho mã nguồn trong đó có những đoạn thử nghiệm đưa Android về lại
nhân 3.8.
Bộ lưu trữ flash trên các thiết bị Android được chia thành nhiều phân vùng,
như "system" dành cho hệ điều hành và "/data" dành cho dữ liệu người dùng và cài
đặt ứng dụng. Khác với các bản phân phối Linux cho máy tính để bàn, người sở
hữu thiết bị Android không được trao quyền truy cập root vào hệ điều hành và các
phân vùng nhạy cảm như /system được thiết lập chỉ đọc.
Tuy nhiên, quyền truy cập root có thể chiếm được bằng cách tận dụng
những lỗ hổng bảo mật trong Android, điều mà cộng đồng mã nguồn mở thường
xuyên sử dụng để nâng cao tính năng thiết bị của họ, kể cả bị những người ác ý sử
dụng để cài virus và phần mềm ác ý.
Việc Android có được xem là một bản phân phối Linux hay không vẫn còn
là vấn đề gây tranh cãi, tuy được Linux Foundation và Chris DiBona, trưởng nhóm
mã nguồn mở Google, ủng hộ. Một số khác, như linux-magazine.com thì không
đồng ý, do Android không không hỗ trợ nhiều công cụ GNU, trong đó có glibc.
5.2. lập trình Java Spring
5.2.1. Giới thiệu Spring
Spring framework, hay ngắn hơn là Spring, là một cầu trúc dùng đề xây
dựng chương trình ứng dụng mã nguôn mở dành cho ngôn ngữ lập trình Java
Tuy Spring framework không bắt buộc người ta phải tuần theo một mô hình
lập trình cụ thể nào, song nó lan truyền rộng rãi trong cộng đồng những người viết
chương trình dùng Java, như một hình thức chủ yếu thay thể cho mô hình
Enterprise Java Bean.
Theo thiết kế, bộ framework này giải phóng lập trình viên dùng Java, cho
phép họ nhiều quyền tự do hơn và đồng thời cung cấp một giải pháp tiện lợi, đầy
đủ dẫn chứng bằng tài liệu, để dàng sử dụng, phù hợp với những thực hành thông
dụng trong công nghệ.
Spring tramework có thể dùng được trong bất cứ một chương trình ứng dụng
Java nào, rất nhiều các mở rộng và tiến bộ trong việc kiến tạo các trình ứng dụng
dành cho nền tảng mạng web (web-based application) dựa trên nền Java
Enterprise.
Spring framework nồi tiếng cũng một phần do chính đặc thù kể trên vả được
giới thương mại công nhận như một nền tảng kiến trúc có tầm quan trọng trong
chiến lược kiến tạo phần mềm.
5.2.2. Lịch sử phát triển
Phần đầu tiên của Spring famework ban đầu được Rod Johnson viết vào năm
2000. Năm 2001, những mô hình lập trình cho các trình ứng dụng Web được đại
đa số người sử dụng đều do Java Servlet API và Enterprise Java Bean cung cấp.
Năm 2003 thành lập dự án phát tại Sourceforge đề phát triển Spring. Sau khi
phát triển trên nền tảng ban đầu hơn một năm họ đã phát hành phiên bản đầu tiên
(1.0) vào tháng 3 năm 2004.
Spring framework đã làm cho những kỹ thuật vốn không được biết đến mấy
trở nên thành những kỹ thuật được mọi người ưa chuộng trong một thời gian ngắn
ngủi. Một trong những kỹ thuật nổi tiếng hơn cả là kỹ thuật “Đảo ngược quyền
điều khiển”.
Năm 2005 cho thấy mức độ hưởng ứng nâng cao hơn những năm trước,
nguyên do cũng vì những phiên bản mới được giới thiệu với những cột mốc đáng
kể và những tính năng mới được thêm vào.
Diễn đàn Spring ra đời cuối năm 2004 cũng góp phần không nhỏ trong việc
nâng cao tính phổ biến của bộ framework và từ đó đến nay đã sinh trưởng trở
thành một nguồn thông tin quan trọng, giúp đỡ cho người sử dụng.
Vào tháng 12 năm 2005, hội thảo đầu tiên về Spring Framwork đã được tổ
chức tại Miami, Florida thu hút 300 nhà phát triển trong 3 ngày và tiếp theo đó
cuộc hội thảo Antwerp vào tháng 6 năm 2006, thu hút hơn 400 người.
5.2.3. Kiến trúc, các module của Spring Framework
Spring được chia làm nhiều module khác nhau, tùy theo mục đích phát triển
ứng dụng mà ta dùng 1 trong các module đó.

Hình 2. Kiến trúc của Spring Framework

 Core Container
Core container cung cấp chức năng cơ bản của Spring. Thành phần chính
của nó là Bean Factory, một cài đặt của Factory pattern. BeanFactory áp dụng IoC
pattern để đặc tả sự phụ thuộc từ code của ứng dụng.
 Spring Context/Application Context
Spring context là một file cấu hình để cung cấp thông tin ngữ cảnh của
Spring. Spring context cung cấp các service như JNDI access, EJB integration, e-
mail, internalization, validation, và scheduling functionality.
Cung cấp cách để truy cập các đối tượng
 Spring AOP
Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào
Spring framework thông qua cấu hình của nó. Spring AOP module cung cấp các
dịch vụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụng
Spring. Với Spring AOP chúng ta có thể tích hợp declarative transaction
management vào trong ứng dụng mà không cần dựa vào EJB component.
Spring AOP module cũng đưa lập trình metadata vào trong Spring. Sử dụng
cái này chúng ta có thể thêm annotation vào source code để hướng dẫn Spring nơi
và làm thế nào để liên hệ với aspect.
 Spring DAO
Tầng JDBC và DAO đưa ra một cây phân cấp exception để quản lý kết nối
đến database, điều khiển exception và thông báo lỗi được ném bởi vendor của
database. Tầng exception đơn giản điều khiển lỗi và giảm khối lượng code mà
chúng ta cần viết như mở và đóng kết nối. Module này cũng cung cấp các dịch vụ
quản lý giao dịch cho các đối tượng trong ứng dụng Spring.
 Spring ORM
Spring có thể tích hợp với một vài ORM framework để cung cấp Object
Relation tool bao gồm: JDO, Hibernate, OJB và iBatis SQL Maps.
 Spring Web module
Nằm trên application context module, cung cấp context cho các ứng dụng
web. Spring cũng hỗ trợ tích hợp với Struts, JSF và Webwork. Web module cũng
làm giảm bớt các công việc điều khiển nhiều request và gắn các tham số của
request vào các đối tượng domain.
 Spring MVC Framework
MVC Framework thì cài đặt đầy đủ đặc tính của MVC pattern để xây dựng
các ứng dụng Web. MVC framework thì cấu hình thông qua giao diện và chứa
được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of PDF và
Excel file.
5.3. Cơ bản về giao thưc websocket.
5.3.1. Tổng quan websocket
WebSoket là công nghệ hỗ trợ giao tiếp hai chiều giữa client và server bằng
cách sử dụng một TCP socket để tạo một kết nối hiệu quả và ít tốn kém về tài
nguyên. Mặc dù được thiết kế để chuyên sử dụng cho các ứng dụng web, lập trình
viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào.
Cũng có thể hiểu đơn giản: Websocket là một TCP socket được tạo ra khi
web browser connect tới Websocket server. Kết nối này sẽ được giữ liên tục. Vì
vậy client có thể nhận được thông tin (message chat) từ server ngay khi có người
chat, mà client không cần phải hỏi server liên tục (poll). Server sẽ chủ động báo cho
(notify) client khi có message chat mới.
WebSockets cung cấp khả năng giao tiếp hai chiều mạnh mẽ, có độ trễ thấp
và dễ xử lý lỗi.
API cũng rất dễ sử dụng trực tiếp mà không cần bất kỳ các tầng bổ sung nào,
so với Comet, thường đòi hỏi một thư viện tốt để xử lý kết nối lại, thời gian chờ
timeout, các Ajax request (yêu cầu Ajax), các tin báo nhận và các dạng truyền tải
tùy chọn khác nhau (Ajax long-polling và jsonp polling).
Không cần phải có nhiều kết nối như phương pháp Comet long-polling và
cũng không có những nhược điểm như Comet streaming.
5.3.2. Hoạt động của websocket

Hình 3. Hoạt động của websocket


Thiết lập kết nối: Để thực hiện kết nối, client phải gửi một WebSocket
handshake request đến server. Server sẽ gửi trả lại WebSocket handshake response.
Client request

GET /kmachat HTTP/1.1


Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://kmavnteam.com

Server Response

HTTP/1.1 101 Switching Protocols


Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

 Truyền dữ liệu
Đảm bảo việc truyền dữ liệu theo đúng giao thức TCP về độ toàn vẹn và
thứ tự của dữ liệu. Có thể tìm hiểu kỹ hơn về giao thức TCP
 Kết thúc kết nối
Để kết thúc kết nối hai bên sử dụng quá trình bắt tay 4 bước và chiều của
kết nối kết thúc độc lập với nhau. Khi một bên muốn kết thúc, nó gửi đi một gói
tin FIN và bên kia gửi lại tin báo nhận ACK. Vì vậy, một quá trình kết thúc tiêu
biểu sẽ có 2 cặp gói tin trao đổi. Một kết nối có thể tồn tại ở dạng "nửa mở":
một bên đã kết thúc gửi dữ liệu nên chỉ nhận thông tin, bên kia vẫn tiếp tục gửi.
5.4. Công nghệ bảo mật SSL/TLS
5.4.1. Tổng quan về SSL/TLS
SSL/TLS là kỹ thuâ ̣t mã hóa truyền tin trên internet. Sử dụng SSL/TLS ,
bằng viê ̣c mã hóa data truyền tin giữa máy tính và server thì có thể phòng tránh
bên thứ ba nghe trô ̣m hoă ̣c giả mạo data.
SSL được phát triển bởi Netscape. Ngày nay giao thức SSL đã được sử dụng
rộng rãi trên World Wide Web trong việc xác thực và mã hoá thông tin giữa client
và server. Tổ chức IETF đã chuẩn hoá SSL và đặt lại tên là TLS. Mặc dù là có sự
thay đổi về tên nhưng TSL chỉ là một phiên bản mới của SSL. Phiên bản TSL 1.0
tương đương với phiên bản SSL 3.1. Tuy nhiên SSL là thuật ngữ được sử dụng
rộng rãi hơn.
SSL được thiết kế như một giao thức riêng cho bảo mật, hỗ trợ cho rất nhiều
ứng dụng. Giao thức SSL hoạt động bên trên TCP/IP và bên dưới các giao thức
ứng dụng tầng cao hơn như là HTTP, IMAP và FTP.
5.4.2. Lịch sử phát triển
SSL được coi là giao thức bảo mật quan trọng trong tầng Transport có tầm
quan trọng cao nhất đối với sự bảo mật của các trình ứng dụng trên Web.
Nói chung, có một số khả năng để bảo vệ bằng mật mã lưu lượng dữ liệu
HTTP. Ví dụ, vào những năm 1990, tập đoàn CommerceNet đã đề xuất S-HTTP
mà về cơ bản là một cải tiến bảo mật của HTTP. Một phần thực thi của S-HTTP đã
làm cho có sẵn công cộng trong một phiên bản được chỉnh sửa của trình duyệt
Mosaic NCSA mà những người dùng phải mua (trái với trình duyệt Mo NCSA
“chuẩn” có sẵn công cộng và miễn phí trên Internet).
Tuy nhiên, cùng thời điểm Netscape Communication đã giới thiệu SSL và
một giao thức tương ứng với phiên bản đầu tiên của Netscape Navigator, Trái với
tập đoàn CommerceNet, Netscape Communications đã không tính phí các khách
hàng của nó về việc thực thi giao thức bảo mật của nó. Kết quả, SSL trở thành giao
thức nổi bật để cung cấp các dịch vụ bảo mật cho lưu lượng dữ liệu HTTP 1994 và
S-HTTP lặng lẽ biến mất.
Cho đến bây giờ, có ba phiên bản của SSL:
SSL 1.0: được sử dụng nội bộ chỉ bởi Netscape Communications. Nó chứa
một số khiếm khuyết nghiêm trọng và không bao giờ được tung ra bên ngoài.
SSL 2.0: được kết nhập vào Netscape Communications 1.0 đến 2.x. Nó có
một số điểm yếu liên quan đến sự hiện thân cụ thể của cuộc tấn công của đối tượng
trung gian. Trong một nỗ lực nhằm dùng sự không chắc chắn của công chúng về
bảo mật của SSL, Microsoft cũng đã giới thiệu giao thức PCT (Private
Communication Technology) cạnh tranh trong lần tung ra Internet Explorer đầu
tiên của nó vào năm 1996.
Netscape Communications đã phản ứng lại sự thách thức PCT của Microsoft
bằng cách giới thiệu SSL 3.0 vốn giải quyết các vấn đề trong SSL 2.0 và thêm một
số tính năng mới. Vào thời điểm này, Microsoft nhượng bộ và đồng ý hỗ trợ SSL
trong tất cả các phiên bản phần mềm dựa vào TCP/IP của nó (mặc dù phiên bản
riêng của nó vẫn hỗ trợ PCT cho sự tương thích ngược).
5.4.3. Cấu trúc của SSL
Cấu trúc của SSL và giao thức SSL tương ứng được minh họa trong hình

Hình 4. Cấu trúc của SSL


sau.
Theo hình này, SSL ám chỉ một lớp (bảo mật) trung gian giữa lớp vận
chuyển (Transport Layer) và lớp ứng dụng (Application Layer). SSL được xếp lớp
lên trên một dịch vụ vận chuyển định hướng nối kết và đáng tin cậy, chẳng hạn
như được cung cấp bởi TCP. Về khả năng, nó có thể cung cấp các dịch vụ bảo mật
cho các giao thức ứng dụng tùy ý dựa vào TCP chứ không chỉ HTTP. Thực tế, một
ưu điểm chính của các giao thức bảo mật lớp vận chuyển (Transport layer) nói
chung và giao thức SSL nói riêng là chúng độc lập với ứng dụng theo nghĩa là
chúng có thể được sử dụng để bảo vệ bất kỳ giao thức ứng dụng được xếp lên trên
TCP một cách trong suốt.
Hình 4 minh họa một số giao thức ứng dụng điển hình bao gồm NSIIOP,
HTTP, FTP, Telnet, IMAP, IRC, và POP3. Tất cả chúng có thể được bảo vệ bằng
cách xếp chúng lớn hơn SSL (mẫu tự S được thêm vào trong các từ ghép giao thức
tương ứng chỉ định việc sử dụng SSL).
Tuy nhiên, SSL được cấu trúc theo định lướng client-server và không đáp
ứng các yêu cầu của các giao thức dành cho ứng dụng ngang hàng.
- Tóm lại, giao thức SSL cung cấp sự bảo mật truyền thông vốn có ba đặc
tính cơ bản:
 Các bên giao tiếp (client và server) có thể xác thực nhau bằng cách sử
dụng mật mã khóa chung.
 Sự bí mật của lưu lượng dữ liệu được bảo vệ vì nối kết được mã hóa trong
suốt sau khi một sự thiết lập quan hệ ban đầu và sự thương lượng khóa session
đã xảy ra.
 Tính xác thực và tính toàn vẹn của lưu lượng dữ liệu cũng được bảo vệ vì
các thông báo được xác thực và được kiểm tra tính toàn vẹn một cách trong suốt
bằng cách sử dụng MAC.
Tuy nhiên, điều quan trọng cần lưu ý là SSL không ngăn các cuộc tấn công
phân tích lưu lượng. Ví dụ, bằng cách xem xét các địa chỉ IP nguồn và đích không
được mã hóa và các sô cổng TCP, hoặc xem xét lượng dữ liệu được truyền, một
người phân tích lưu lượng vẫn có thể xác định các bên nào đang tương tác, các loại
dịch vụ đang được sử dụng, và đôi khi ngay cả dành được thông tin về các mối
quan hệ doanh nghiệp hoặc cá nhân. Hơn nữa, SSL không ngăn các cuộc tấn công
có định hướng dựa vào phần thực thi TCP, chẳng hạn như các cuộc tấn công làm
tràn ngập TCP SYN hoặc cưỡng đoạt session.
Để sử dụng sự bảo vệ SSL, cả client lẫn server phải biết rằng phía bên kia
đang sử dụng SSL. Có ba khả năng để giải quyết vấn đề này:
 Sử dụng các số cổng chuyên dụng được dành riêng bởi Internet Asigned
Numbers Authority (IANA). Trong trường hợp này, một số cổng riêng biệt
phải được gán cho mọi giao thức ứng dụng vốn sử dụng SSL.
 Sử dụng số cổng chuẩn cho mọi giao thức ứng dụng và để thương lượng các
tùy chọn bảo mật như là một phần của giao thức ứng dụng (bây giờ được
chỉnh sửa đôi chút).
 Sử dụng một tùy chọn TCP để thương lượng việc sử dụng một giao thức bảo
mật, chẳng hạn như SSL trong suốt giai đoạn thiết lập nối kết TCP thông
thường.
5.5. Kiến trúc End to end encryption
5.5.1. Giới thiệu về End to end encryption( mã hóa đầu cuối ):
End-To-End (E2E) là một dạng mã hóa dữ liệu đầu cuối đối với những tin
nhắn chat, thư email được gửi và trao đổi trên Internet.
Tất cả những trao đổi trực tiếp trên ứng dụng đó đều được mã hóa bảo vệ
như: “Tin nhắn, hình ảnh, cuộc gọi, video, âm thanh, và một vài tệp tin đính kèm
khác”.

Hình 5. Minh họa mã hóa E2E

Mục đích của việc mã hóa dữ liệu E2E là bảo vệ mọi dữ liệu đang được lưu
trữ trên hệ thống máy tính và những dữ liệu được truyền qua Internet hay giữa các
máy với nhau. Các thuật toán mã hóa đều có tính xác thực nguồn gốc của dữ liệu
gửi, đảm bảo tính toàn vẹn rằng nội dung dữ liệu đó sẽ không bị thay đổi, hủy bỏ
hay thu hồi lại khi gửi dữ liệu đi.
Điểm nổi trội trong mã hóa dữ liệu End – To - End Security là cho dù dữ
liệu không may bị đánh cắp thì phải mất nhiều thời gian và nguồn lực cho việc giải
mã hóa dữ liệu. Điều này nâng cao tính an toàn, bảo mật cho dữ liệu, tránh những
trường hợp thất thoát thông tin dữ liệu quan trọng.
5.5.2. Quy trình mã hóa end to end encryption:
Kiến trúc E2EE thường sử dụng thuật toán mã hóa đối xứng, nhưng mã hóa
Rivest-Sharmir-Adleman (RSA) được sử dụng rộng rãi để bảo vệ dữ liệu nhạy
cảm, đặc biệt là khi nó được gửi qua một mạng không an toàn như Internet.
Trong đó, có hai loại khóa được sử dụng là khóa công khai(public key) và
khóa riêng tư (private key).
Sự phổ biến của thuật toán này là do cả khóa công khai và khóa bí mật của
nó đều có thể mã hóa dữ liệu và đảm bảo tính bí mật, toàn vẹn, xác thực và không
thu hồi của dữ liệu và truyền thông kỹ thuật số thông qua việc sử dụng chữ ký số.

Hình 6. Quy trình mã hóa End to End


Khóa công khai được chia sẻ, bất kỳ người dùng nào cũng có thể lấy được
khóa công khai của người khác, khóa công khai được sử dụng để mã hóa dữ liệu
trước khi gửi đi.
Ngược lại, khóa riêng tư không được chia sẻ, được dùng để giả mã dữ liệu
được mã hóa bỏ khóa công khai của cặp khóa này.
Như vậy, người A khi gửi tin nhắn cho người B sẽ mã hóa dữ liệu bằng một
khóa công khai của người B, và người B khi nhận được tin nhắn, sẽ giải mã nó
bằng mã bí mật của người B và ngược lại tương tự như vậy.
5.5.3. Thuật toán RSA
 Mô tả sơ lược
RSA là một hệ mã hóa bất đối xứng được phát triển bởi Ron Rivest, Adi
Shamir và Leonard Adleman (tên của nó cũng chính là tên viết tắt của 3 tác giả này)
và được sử dụng rộng rãi trong công tác mã hoá và công nghệ chữ ký điện tử.
Trong hệ mã hóa này, public key có thể chia sẻ công khai cho tất cả mọi người.
Hoạt động của RSA dựa trên 4 bước chính: Key generation (sinh khóa) , Key
distribution (chia sẻ key), Encription (mã hóa) và Decryption (giải mã).
Bước 1: Key generation
Chọn ngẫu nhiên hai số nguyên tố p,q được giữ bí mật, n = pq
- n được dùng như một mô đun cho cả khóa công khai và khóa bí mật. Độ
dài của nó thường được biểu diễn dạng bít là độ dài của khóa
- Tính giá trị hàm số ơ le Ø(n) = (p-1)(q-1)
- Chọn một số tự nhiên e sao cho 1< e < Ø(n) và là một số nguyên tố cùng
nhau với Ø(n)
- Tính d sao cho d.e ≡ 1 (mod Ø(n) ).
Lưu ý:
- Các số nguyên tố được chọn bằng phương pháp thử xác suất
- Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng
Khóa công khia bao gồm:
- Mô đun
- e là số mũ công khai (số mũ mã hóa)
Khóa bí mật bao gồm:
- Mô đun n xuất hiện trong cả khóa công khai và khóa bị mật
- d là số mũ bí mật (số mũ giải mã)
Bước 2: Key distribution
Nếu A muốn gửi thông tin cho B và sử dụng mã hóa RSA thì A phải biết
được public key để mã hóa tin nhắn của B và B phải dùng khóa bí mật để giải mã.
Để A có thể gửi tin nhắn đã mã hóa tới B. Thì B phải gửi khóa công khai
(n,e) đến A thông qua một cách đáng tin cậy nhưng không cần thiết bí mật. Khóa bí
mật của B là (d) không bao giờ được chia sẻ.
Bước 3: Encryption
Sau khi A nhận được khóa công khai của B thì A có thể gửi tin M tới B
Để làm được điều đó trước tiên A chuyển đổi M( tin nhắn văn bản, hình ảnh
giọng nói…) thành một số nguyên m sao cho 0 ≤ m < n theo một hàm có thể đảo
ngược ( tức là từ m có thể chuyển ngược lại M ) được thỏa thuận trước.
Quá trình này sử dụng mã hóa AES
Lúc này A có m và biết n, e do B gửi tới. A sẽ tính c là bản mã hóa của m
theo công thức:
c = me mod n
sau đó A gửi c đến B
Bước 4: Decryption
B nhận được c từ A và biết khóa bí mật. B có thể tìm được m từ c theo công
thức:
m= cd mod n
Quá trình giải mã hoạt động vì ta có:
cd ≡ (me)d ≡ med (mod n)
Do ed ≡ 1 nên med = m (mod p) và
med ≡ m (mod p)

med ≡ m (mod q)
Do p và q là hai số nguyên tố cùng nhau nên áp dụng định lý số dư Trung
Quốc ta có:
med ≡ m ( mod pq)
hay cd ≡ m (mod n)
biết m và B tìm lại M theo phương pháp mã hóa đã thỏa thuận trước.
 Tính an toàn của RSA
Tính an toàn của RSA chủ yếu dựa vào bộ tạo số ngẫu nhiên sinh ra 2 số
nguyên tố p và q ban đầu. Việc tính ngược lại p và q từ n là chuyện hầu như không
thể với hai số nguyên tố 2048 bits như đã đề cập ở trên. Nhưng việc tính ra d từ từ
p và q là việc rất dễ dàng. Do đó nếu như một bên nào đó đoán ra được hoặc tìm ra
lỗ hổng của bộ sinh số ngẫu nhiên đó thì coi RSA bị hoá giải.
5.5.4. Thuật toán AES
Được sử dụng để mã hóa tin nhắn M thành m
 Sơ lược về AES
Trong mật mã học, Advanced Encryption Standard (tiếng Anh, viết tắt: AES,
nghĩa là Tiêu chuẩn mã hóa tiên tiến) là một thuật toán mã hóa khối được chính
phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa.
AES được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ
lưỡng. AES được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và công
nghệ quốc gia Hoa kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5
Thuật toán được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và
Vincent Rijmen.
 Mô tả thuật toán:
AES chỉ làm việc với các khối dữ liệu (đầu vào và đầu ra) 128 bít và khóa có
độ dài 128, 192 hoặc 256 bít
Mỗi khối dữ liệu 128 bit đầu vào được chia thành 16 byte (mỗi byte 8 bit),có
thể xếp thành 4 cột, mỗi cột 4 phần tử hay là một ma trận 4x4 của các byte, nó
được gọi là ma trận trạng thái. Trong quá trình thực hiện thuật toán các toán tử tác
động để biến đổi ma trận trạng thái này.
 Các bước thực hiện thuật toán
Bao gồm các bước:
1. Khởi động vòng lặp
- AddRoundKey — Mỗi cột của trạng thái đầu tiên lần lượt được kết
hợp với một khóa con theo thứ tự từ đầu dãy khóa.
2. Vòng lặp
- SubBytes — đây là phép thế (phi tuyến) trong đó mỗi byte trong trạng
thái sẽ được thế bằng một byte khác theo bảng tra (Rijndael S-box).
- ShiftRows — dịch chuyển, các hàng trong trạng thái được dịch vòng
theo số bước khác nhau.
- MixColumns — quá trình trộn làm việc theo các cột trong khối theo
một phép biến đổi tuyến tính.
- AddRoundKey
3. Vòng lặp cuối
- SubBytes
- ShiftRows
- AddRoundKey
Tại chu trình cuối thì bước MixColumns không thực hiện.
5.5.5. Bước SubBytes
Các byte được thế thông qua bảng tra S-box. Đây chính là quá trình phi
tuyến của thuật toán. Hộp S-box này được tạo ra từ một phép biến đổi khả nghịch
trong trường hữu hạn GF (28) có tính chất phi tuyến. Để chống lại các tấn công dựa
trên các đặc tính đại số, hộp S-box này được tạo nên bằng cách kết hợp phép
nghịch đảo với một phép biến đổi affine khả nghịch. Hộp S-box này cũng được
chọn để tránh các điểm bất động (fixed point).
Xem thêm: Rijndael S-box.
5.5.6. Bước ShiftRows
Các hàng được dịch vòng một số bước nhất định. Đối với AES, hàng đầu được
giữ nguyên. Mỗi byte của hàng thứ 2 được dịch vòng trái một vị trí. Tương tự, các
hàng thứ 3 và 4 được dịch vòng 2 và 3 vị trí. Do vậy, mỗi cột khối đầu ra của bước
này sẽ bao gồm các byte ở đủ 4 cột khối đầu vào. Đối với Rijndael với độ dài khối
khác nhau thì số vị trí dịch chuyển cũng khác nhau.
5.5.7. Bước MixColumns
Bốn byte trong từng cột được kết hợp lại theo một phép biến đổi tuyến tính
khả nghịch. Mỗi khối 4 byte đầu vào sẽ cho một khối 4 byte ở đầu ra với tính chất
là mỗi byte ở đầu vào đều ảnh hưởng tới cả bốn byte đầu ra. Cùng với bước
ShiftRows, MixColumns đã tạo ra tính chất khuếch tán cho thuật toán. Mỗi cột
được xem như một đa thức trong trường hữu hạn và được nhân với đa thức
(modulo ). Vì thế, bước này có thể được xem là phép nhân ma trận trong trường
hữu hạn.
5.5.8. Bước AddRoundKey
Tại bước này, khóa con được kết hợp với các khối. Khóa con trong mỗi chu
trình được tạo ra từ khóa chính với quá trình tạo khóa con Rijndael; mỗi khóa con
có độ dài giống như các khối. Quá trình kết hợp được thực hiện bằng cách XOR
từng bít của khóa con với khối dữ liệu.
5.6. Tổng kết chương
Kết thúc chương II nắm được kiến thức cơ sở về lý thuyết như lập trình
android, Spring framework, hiểu các thuật toán mã hóa và trình tự thực hiện của
các phép mã hóa RSA, AES
6. CHƯƠNG III. PHÁT TRIỂN ỨNG DỤNG SECURE CHAT

6.1. Khảo sát hệ thống ứng dụng Chat.


Hiện nay, việc trao đổi thông tin giữa những cá nhân, tổ chức, doanh nghiệp
với nhau là rất cần thiết, hàng ngày có hàng trăm tỉ tin nhắn được gửi qua lại để
truyên thông tin. Mọi người đang cần một phương tiện để thực hiện việc đó một
cách dễ dàng hơn. Vì vậy người dùng luôn muốn hướng tới một ứng dụng trò
chuyện tiện lợi, dễ dàng sử dụng và đáp ứng các yêu cầu khác nhau của các đối
tượng người dùng.
Bên cạnh đó, các vấn đề liên quan đến riêng tư cá nhân, bảo mật công nghệ
càng ngày càng trở nên phức tạp và nghiêm trọng, người dùng cũng dần nhận thức
được tầm quan trọng của vấn đề này.
Tổng hợp yêu cầu và mục tiêu của đề tài:
 Xây dựng được hệ thống chat trực tuyến, người dùng có khả năng
đăng nhập và đăng ký tài khoản sử dụng đễ dàng.
 Dữ liệu trò chuyện của người dùng được lưu trữ.
 Ứng dụng chat xây dựng đảm bảo yêu cầu về bảo mật nội dung trò
chuyện.
6.2. Phân tích hệ thống chat.
6.2.1. Mô hinh tổng quan của hệ thống.
Hình 7. Sơ đồ tổng quan hệ thống
Hệ thống theo mô hình client - server bao gồm hai thành phần chính:
 App Chat (client): Ứng dụng chat dành cho người dùng trên Android.
 Chat Server (server): Máy chủ dịch vụ của hệ thống, bao gồm các dịch vụ:
- Key service : Lưu trữ các khóa người dùng, khóa thuật toán mã hóa..
- Realtime chat service: Làm nhiệm vụ cung cấp dịch vụ giử tin nhắn
thời gian thực.
- Chat API: Cung cấp các hàm API giúp app chat thao tác với nguồn tài
nguyên của hệ thống.
- File API: Quản lý nội dung tệp tin lưu trữ của người dùng. Cung cấp
các hàm hỗ trợ thao tác với các tệp tin được lưu trữ.
 Biểu đồ phân rã chức năng chung của hệ thống.

Hình 8. Biểu đồ phân rã chức năng hệ thống


Mô tả chức năng:

 Đăng nhập: Đăng nhập là bước xác định người dùng của hệ thống. Khi
muốn tham gia vào hệ thống người sử dụng cần đăng nhập một tài khoản
được đăng ký trước đó để hệ thống có thể nhận biết và quản lý người dùng.
 Đăng ký:Người dùng nhập thông tin theo mẫu mà hệ thống yêu cầu, để đăng
ký một tài khoản mới.
 Quên mật khẩu: Giúp người dùng truy cập lại được tài khoản của mình khi
quên mật khẩu của tài khoản.
 Cập nhập thông tin người dùng: Chức năng này cho phép người dùng thay
đổi thông tin cá nhân như tên, ảnh đại diện ...
 Thêm liên hệ: Chức năng này cho phép người dùng tìm kiếm những người
dùng khác vào danh sách Danh bạ của mình
 Xóa liên hệ: Xóa một liên hệ ra khỏi danh sách dạnh bạ của người dùng.
 Tạo cuộc trò chuyện: chức năng này cho phép người dùng tạo cuộc trò
chuyện để bắt đầu trò truyện với một người dùng khác.
 Trò chuyện: Chức năng này cho phép người dùng giử tin nhắn cho người
dùng khác, hiện thị các nội dung trò chuyện cũ..
6.3. Phân tích giải pháp áp dụng công nghệ bảo mật.
6.3.1. Xác thực truy cập API.
Để quản lý và đảm bảo tính bảo mật của các API trong hệ thống Chat
Server, nhóm thực hiện đề tài lựa chọn giải pháp sử dụng JWT để xác thực yêu cầu
truy vấn của người dùng.
Nhóm lựa chọn sử dụng JWT bởi các đặc điểm nổi bật sau đây
 JWT gọn nhẹ và đơn giản. JWT có thể được truyền thông qua URL,
hoặc qua giao thức POST, hay nhét vào bên trong phần HTTP Header.
 Rất phù hợp để áp dụng xây dựng stateless API, bởi token đã chứa đầy
đủ các thông tin cần thiết để thực thi authentication.
 Việc áp dụng ở phía client rất đơn giản, cho dù nền tảng web hay
mobile.
 Dễ dàng mở rộng server hơn. Điều này là nhờ tính stateless của JWT,
server không cần phải lưu session state, nên trong trường hợp phía server
sử dụng cơ chế load balancing, bất kỳ máy server nào cũng có thể handle
request và vẫn có được state của user thay vì chỉ server mà user đã login.
 JWT không sử dụng cookie nên ta không cần phải lo về vấn đề CSRF.
 Chúng ta có thể có nhiều hệ thống chạy các nền tảng khác nhau có thể
cùng sử dụng một JWT để thực hiện xác thực người dùng. Điều này là
khó hoặc không thể nếu trạng thái được lưu giữ phía server.
6.3.2. Xác nhận đăng nhập với OTP Code.
Để đảm bảo tài khoản người dùng không bị đánh cắp, khi có đăng nhập trên
một thiết bị mới hệ thống sẽ gửi một tin nhắn SMS chứa mã OTP đến điện thoại
người dùng theo thông tin mà người dùng đăng ký sử dụng, yêu cầu người dùng
trên thiết bị mới nhập chính xác OTP code mới có thể đăng nhập.
Ngoài ra với mỗi hành động liên quan đến bảo mật tài khoản, hệ thống đều
sẽ yêu cầu giử OTP code để xác thực hành động đó có đúng là của người dùng như
quên mật khẩu, reset private key, vô hiệu hóa tài khoản.
Mỗi mã OTP tồn tại trong vòng 30s.
6.3.3. Bảo vệ nội dung đường truyền Client-Server.
Đảm bảo tính bảo mật cho dữ liệu được chia sẻ trong hệ thống, giữa App chat
và Chat Server đắc biệt là các dữ liệu quan trọng như JWT, nhóm thực hiện đề tài
nghiên cứu, tìm hiểu về các giải pháp bảo vệ dữ liệu truyền trong mạng Internet và
lựa chọn sử dụng công nghệ SSL/TLS. Như đã trình bày trong Chương II,
SSL/TLS là công nghệ được sử phổ biến rộng rãi có tính bảo mật cao, tuyệt đối.
Do được sử dụng phổ biến vậy nên việc cài đặt, áp dụng SSL/TLS vào các hệ
thống khá đơn giản, hầu hết các nền tảng phát triển phần mềm hiện nay như java
spring, .net đều hỗ trợ sẵn.
6.3.4. Giải pháp áp dụng kiến trúc E2EE.
Trong quá trình nghiên cứu, tìm hiểu và tham khảo các mô hình sử dụng kiến
trúc E2EE trong hệ thống trò chuyện trực tuyến như keybase, messenger... nhóm
thực hiện đề tài xây dựng giải pháp sử dụng kiến trúc E2EE qua giải quyết các vấn
đề sau:
6.3.4.1. Vấn đề mã hóa nội dung cuộc trò chuyện
Với mỗi người dùng trong hệ thống, khi tham gia hệ thống sẽ được cấp một
cặp key của mã hóa không đối xứng RSA (private key và public key) ngay trên
thiết bị người dung và lưu trữ trên máy chủ thông qua Key service, nhắm mục
đích: để chia sẻ public key cho những người dùng khác trong hệ thống.
Trên mỗi cuộc trò chuyện khi được khởi tạo hệ thống sẽ cấp cho cuộc trò
chuyện đó một secret key của thuật toán mã hóa AES ngay trên thiết bị của người
dùng khởi tạo cuộc trò chuyện. Secret key sẽ được sử dụng để mã hóa toàn bộ nội
dung các tin nhắn trong cuộc trò chuyện. Sau khi secret key được tạo, hệ thống sẽ
mã hóa secret key này bằng public key của từng người có trong cuộc trò chuyện,
và thông qua Key serivice chuyển đến từng người dùng tương ứng với public key,
đồng thời lưu trữ các secret key đã mã hóa này trên máy chủ để đễ dàng chia sẻ
key.
6.3.4.2. Vấn đề chuyển private key của người dùng tới thiết bị mới.
Private key của người dùng được tạo và lưu trữ trên thiết bị của họ, không lưu
trữ khóa này trên máy chủ, vậy nếu khi thiết bị của người dùng bị hư hỏng hoặc
mất sẽ không có cách nào khôi phục lại private key này. Do vậy nhóm thực hiện đề
tài đã thảo luận và đưa ra giải pháp như sau:
Sau khi khởi tạo private key và public key, private key sẽ được mã hóa bởi
thuật toán AES thông qua một khóa do người dùng tùy chọn và private key được
mã hóa này sẽ được lưu trữ trên chat server để đảm bảo phía server không thể lấy
được private key của người dùng.
Khi đăng nhập ở thiết bị mới, App chat sẽ kiểm tra nếu không có tìm thấy
private key của người dùng trên thiết bị sẽ tiến hành yêu cầu lấy lại private key trên
server lưu trữ, giải mã theo mật khẩu người dùng đã đặt và lưu trữ lại trên thiết bị.
6.3.4.3. Hoạt động mã hóa của ứng dụng Sercure Chatting.
 Mô hình trao đổi secret key mã hóa tin nhắn.
Bước 1: Người giử tạo cuộc trò chuyện.
Bước 2: Hệ thống secret key (SK), mã hóa các SK bằng public key của từng
người dùng trong cuộc trò chuyện thành các secret key mã hóa (ESK).
Bước 3: Gửi ESP đến từng người nhận trong cuộc trò chuyện.
Bước 4: Người nhận nhận được (ESK)
Bước 5: Sử dụng private key giải mã ESK thành SK giống với người tạo
cuộc trò chuyện
Bước 6: Lưu trữ sử dụng làm khóa mã hóa tin nhắn cho cuộc trò chuyện.
 Mô hình mã hóa tin nhắn:
Bước 1: Người gửi tin nhắn văn bản (Text message – TM)
Bước 2: Tin nhắn văn bản được chuyển đổi thành Bytes Array (BA)
Bước 3: Mã hóa Bytes Array được thực hiện bởi AES với khóa bảo mật
ECDH đã được tạo ( Encrypt Bytes Array- EBA)
Bước 4: Chuyển đổi mã Bytes Array đã được mã hóa thành chuỗi (ES)
Bước 5: Gửi (ES) đến máy chủ
Bước 6: Người nhận nhận được chuỗi (ES)
Bước 7: Chuyển đổi chuỗi (ES) thành dạng mảng (EBA)
Bước 8: Giải mã mảng vừa thu được (BA)
Bước 9: Chuyển đổi BA thành chuỗi giống với người gửi tin nhắn (TM)
6.4. Thiết kế hệ thống chat.
6.4.1. Thiết kế Chat Server.
Các khối chức năng:

Chat Server
Key service Realtime chat service

Chat API File API

Hình 9. Các khối chức năng trong hệ thống


 Key service :
- Lưu trữ, xử lý các khóa người dùng, khóa thuật toán mã hóa.
 Realtime chat service:
- Làm nhiệm vụ cung cấp dịch vụ gửi tin nhắn thời gian thực.
 Chat API: Cung cấp các hàm API giúp app chat thao tác với nguồn tài
nguyên của hệ thống, xử lý các chức năng như:
- Xác thực đăng nhập.
- Xác thực OTP code
- Đăng ký.
- Quản lý danh bạ.
- Quản lý cuộc trò chuyện.
 File API: Quản lý nội dung tệp tin lưu trữ của người dùng. Cung cấp các
hàm hỗ trợ thao tác với các tệp tin được lưu trữ.
- Lưu trữ hình đại diện của ngươi dùng
- Lưu trữ các file âm thành, hình ảnh chia sẻ trong cuộc trò chuyện

6.4.2. Thiết kế cơ sở dữ liệu.

Biểu đồ diagram:
user_conversation
id bigint(11)
messages
thread_uui varchar(64)
uuid varchar(64)
d type int(11)
user_uuid varchar(64) device_code varchar(64)
conversation
enkey text thread_uuid varchar(64)
uuid varchar(64)
last_seen datetime user_uuid varchar(64)
user_uuid varchar(64)
thread_name varchar(64) time datetime
create_at datetime encrypt tinyint(4)
last_msg_at datetime payload text
unread int(11) sender_uuid varchar(64)
user_info
uuid varchar(64)
name varchar(512)
dob datetime
address varchar(1024)
phone varchar(64)
user
uuid varchar(64) user_key
account varchar(64) uuid varchar(64)
password varchar(128) publickey text
create_at datetime privatekey text
contact name varchar(128)
id bigint token varchar(128)
user_uuid varchar(64) enable tinyint(1)
contact_uuid varchar(64) token_time datetime
level int device
custom_nam varchar(512) uuid varchar(64)
user_uuid varchar(64)
e
device_code varchar(64)
create_at datetime
device_os varchar(45)

Hình 10. Biểu đồ diagram


Các bảng dữ liệu:
 contact: Bảng chứa thông tin danh bạ người dùng
 conversation: Bảng thông tin các cuộc trò chuyện của người dùng
 device: bảng chứ dữ liệu thiết bị đăng nhập của người dùng
 messages: bảng lưu trữ nội dung tin nhắn của người dùng
 user_conversation: bản liên kết N-M giữa conversation với users
 user_info: Bảng chứa các thông tin của người dùng.
 user_key: Bảng chứ các khóa bảo mật của người dùng.
 users: bảng thông tin đăng nhập, bảo mật của người dùng.
6.4.3. Thiết kế giao diện App Chat

 Giao diện đăng nhập, nhập mật khẩu

Hình 11. Form đăng nhập, Form Password


Mô tả:
Người dùng đã có tài khoản thực hiện nhập Account và nhấn Continue hệ
thống chuyển sang giao diện nhập mật khẩu
Nếu chưa có tài khoản nhấn tạo tài khoản mới Create new account hệ thống
chuyển sang giao diện tạo tài khoản
 Giao diện đăng nhập thiết bị lần đầu

Hình 12. Form nhập mã OTP, Form dashboard


Mô tả:
Nếu người dùng đăng nhập trên thiết bị mới hệ thống sẽ yêu cầu mã OTP
được gửi về số điện thoại mà người dùng đã đăng ký trước đó
Sau đó nhấn Login để đăng nhập hệ thống chuyển sang giao diện
Dashboard trường hợp quên mật khẩu người dùng chọn Forgot Password để
chuyển sang giao diện lấy lại mật khẩu
 Giao diện đăng ký

Hình 13. Form đăng ký


Mô tả:
Người dùng nhập thông tin cá nhân số điện thoại và nhấn Next để chuyển
sang màn hình nhập mã OTP như hình trên.
 Giao diện danh bạ

Hình 14. Form danh bạ

Mô tả:
Danh sách bạn bè hiển thị ở đây, ngoài ra còn có chức năng tìm kiếm bạn bè,
thêm liên hệ thông qua button Add Contact
 Giao diện cuộc trò chuyện

Hình 15. Form conversation

Mô tả:
Các cuộc trò chuyện đã tham gia sẽ hiển thị ở đây, chức năng khác tìm kiếm
cuộc trò chuyện
 Giao diện trang cá nhân

Hình 16. Form trang cá nhân


Mô tả:

Giao diện trang cá nhân hiển thị vị trí thêm, xóa contact
6.5. Triển khai thử nghiệm tính năng của ứng dụng
1.1.1. Thực nghiệm về giao diện chương trình.
Về giao diện của chương trình, đã chạy thử trên các cỡ màn hình khác nhau
cho kết quả tốt, bố cục tự động co dãn theo kích thước màn hình theo tý lệ mong
muốn.
1.1.2. Thực nghiệm về tính năng chính của chương trình.
1.1.2.1. Tính năng xác thực bằng OTP code.
Tạo một tài khoản mới. Tại màn hình đăng nhập, nhập tên tài khoản mới tạo
và ấn CONTINUE, màn hình yêu cầu nhập OTP code và mật khẩu hiện ra như
hình.

Hình 17. Đăng nhập xác thực mã OTP


Trong khoảng 5-10s kiểm ra điện thoại, đã có tin nhắn mã OTP từ hệ thống ,
nhập mã OPT, mật khẩu và chọn LOGIN.

Hình 18. Tin nhắn gửi mã OTP về điện thoại

Ứng dụng đã chuyển đến màn hình yêu cầu nhập mã khóa bảo mật khi nhập
dung OTP code và mật khẩu, vậy chức năng xác thực đăng nhập với OTP code đã
hoạt động.
1.1.2.2. Tính năng trò chuyện trực tuyến.
Sau khi đăng nhập người dùng tìm liên hệ, và tạo cuộc trò chuyện.
Giao diện trò chuyện hiện ra, thử gửi các tin nhắn.

Hình 19. Cuộc trò chuyện

Việc gửi và nhận tin nhắn giữa hai người dùng diễn ra suôn sẻ. Điều đó
chứng tỏ chức năng cơ bản nhất của hệ thống đã hoạt động tốt.
1.1.2.3. Tính năng bảo mật mã hóa nội dung của ứng dụng.
 Nội dung lưu trữ trên cơ sở dữ liệu.
Truy cập cơ sở dữ liệu lưu trữ tin nhắn của người dùng.
Các messages hiển thị trong bảng ở Hình 20.

Hình 20. Bảng cơ sở dữ liệu tin nhắn


Cột payload chính là nội dung tin nhắn của người dùng được mã hóa.
 Nội dung gói tin được mã hóa khi gửi tin nhắn.
Trường dữ liệu payload chính là mã base64 của byte dữ liệu nội dung tin
{
     "type": 0,
     "device_code": "d57e5c22487fa091",
     "thread_uuid": "a35835eb-71af-4a3a-bcc2-573e62a89ef7",
     "encrypt": true,
     "payload": "pgNU2BnKjB7YiF/ffzppWuTJf66cu25IziVNH3YTuH6B8SSS7cM8wvZjyKTmcTcD\n"
}

nhắn được mã hóa.


 Kiểm tra nội dung gói tin trên đường truyền internet.
Sử dụng wireshark bắt lấy các gói tin được gửi từ điện thoại tới Chat server, để
thấy các gói tin TLS.

Hình 21. Kết quả trên Wireshark

Qua kiểm tra nội dung tin nhắn lưu trữ và nội dung gói tin được gửi đi trên
thiết bị di động, nội dung tin nhắn đều được mã hóa trên cả đường truyền và trên
máy chủ lưu trữ, bên phía người nhận tin nhắn hiển thị được đúng nội văn bản
được gửi đi từ người nhận. Vây chức năng mã hóa/giải mã của ứng dụng đã hoạt
động tốt.
6.6. Tổng kết chương

Kết thúc phần thực nghiệm nhận thấy hệ thống được hoạt động ổn định, giao
diện hoạt động tốt.
Các chức năng khác của chương trình như tốc độ gửi tin nhắn, thêm bớt
danh bạ, dashboard hoạt động tốt.
7. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

7.1. Kết luận


Trong 3 chương của báo cáo, nhóm đã giới thiệu được đề tài đang thực hiện,
sự cần thiết của một Secure chat application. Đồng thời nhóm đã hệ thống hóa cơ
sở lý thuyết về lập trình Android với Java spring, giao thức Websocket, cùng với
công nghệ bảo mật SSL/TLS và một vài thuật toán mã hóa.
Thông qua đó, nhóm đã triển khai phát triển ứng dụng secure chat với các
chức năng cần thiết để trò chuyện trực tuyến bảo mật trên Android.
Tuy về cơ bản đã hoàn thiện nhưng vẫn còn một số thiết sót, nhóm sẽ tiếp
tục hoàn thiện để sản phẩm được tốt hơn.
7.2. Hướng phát triển
Trong tương lai nhóm hướng tới việc hoàn thiện các chức năng của ứng
dụng và phát triển thêm các chức năng mới đa dạng và phong phú hơn. Bên cạnh
việc cải thiện giao diện cho đẹp mắt hơn, chúng em muốn tăng sự tương tác giữa
các người dùng để thu hút nhiều người sử dụng. Đồng thời nâng cao độ bảo mật
cho ứng dụng.
8. Tài liệu tham khảo

You might also like