XÂY DỰNG ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG DÙNG GIẢI PHÁP BẢO MẬT CSDL SQLCIPHER (Luận Văn Thạc Sĩ) Đồ án gồm 3 chương cụ thể như sau: Chương 1: Tổng quan về cơ sở dữ liệu SQLite Chương đầu tiên tìm hiểu về cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu trên thiết bị di động; An toàn thông tin trong cơ sở dữ liệu; Tổng quan về cơ sở dữ liệu SQLite và cơ chế hoạt động của SQLite trong Android. Chương 2: Giải pháp bảo mật cơ sở dữ liệu SQLite sử dụng SQLCipher Chương này trình bày về các nguy cơ gây mất an toàn cho cơ sở dữ liệu SQLite; Cơ chế bảo mật cho cơ sở dữ liệu SQLite và tìm hiểu về đặc điểm, tính năng bảo mật và cách thức hoạt động của SQLCipher. Chương 3: Xây dựng ứng dụng có bảo mật trên hệ điều hành Android Chương này xây dựng ứng dụng có bảo mật cơ sở dữ liệu SQLite cho thiết bị di động dùng hệ điều hành Android sử dụng SQLCipher. Cài Đặt SQLcipher , lập trình Android dùng SQLCIPHER, Sqlcipher Android, SQLCipher encryption, Install sqlcipher Windows
Viện Công Nghệ Thông Tin Và Truyền Thông ĐẠI HỌC BÁCH KHOA HÀ NỘI Luận Văn Thạc Sĩ XÂY DỰNG ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG DÙNG GIẢI PHÁP BẢO MẬT CSDL SQLCIPHER Nguyen Thanh Long Ha Noi, 2023 MỤC LỤC MỤC LỤC i LỜI CẢM ƠN Lỗi! Thẻ đánh dấu không được xác định LỜI CAM ĐOAN Lỗi! Thẻ đánh dấu không được xác định CÁC KÝ HIỆU, CHỮ VIẾT TẮT iii DANH MỤC HÌNH VẼ Lỗi! Thẻ đánh dấu không được xác định LỜI MỞ ĐẦU vii CHƯƠNG 1: TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU SQLITE 1.1 Cơ sở liệu hệ quản trị sở liệu thiết bị di động 1.2 An tồn thơng tin sở liệu 1.2.1 Yêu cầu để đảm bảo an toàn cho sở liệu 1.2.2 Các yếu tố liên quan đến an toàn sở liệu 1.2.3 Các chế để bảo vệ tính an tồn sở liệu 1.3 Tổng quan hệ quản trị sở liệu SQLite 1.3.1 Giới thiệu chung hệ quản trị sở liệu SQLite 1.3.2 Đặc trưng hệ quản trị sở liệu SQLite 10 1.3.3 Hiệu suất hoạt động hạn chế SQLite 14 1.4 Cơ chế hoạt động SQLite môi trường Android 15 1.4.1 Lưu trữ liệu 15 1.4.2 Sử dụng SQLite Android 17 1.5 Kết luận chương 23 CHƯƠNG 2: GIẢI PHÁP BẢO MẬT CƠ SỞ DỮ LIỆU SQLITE SỬ DỤNG SQLCIPHER 24 2.1 Các nguy gây an toàn cho sở liệu SQLite 24 i 2.2 Cơ chế bảo mật cho SQLite 25 2.2.1 Mức độ an ninh sở liệu 25 2.2.2 Cơ chế bảo mật cho SQLite 25 2.3 Giải pháp bảo mật sở liệu SQLite sử dụng SQLCipher 27 2.3.1 Giới thiệu SQLCipher 27 2.3.2 Đặc trưng 29 2.3.3 Thiết kế 29 2.3.4 Tính bảo mật 30 2.3.5 Đặc điểm SQLCipher phiên 4.4.0 trở lên 31 2.3.6 SQLCipher API 32 2.3.7 Thao tác mã hoá sở liệu với SQLCipher 47 2.4 Kết luận chương 48 CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG CÓ BẢO MẬT TRÊN HỆ ĐIỀU HÀNH ANDROID 49 3.1 Đặt toán 49 3.2 Phân tích toán đề xuất giải pháp 49 3.3 Xây dựng ứng dụng SQLCipher Android 50 3.3.1 Cơ sở liệu 50 3.3.2 Tích hợp SQLCipher Android 50 3.3.3 Giao diện 53 3.3.4 Đánh giá 59 3.4 Kết luận chương 61 KẾT LUẬN 63 TÀI LIỆU THAM KHẢO 64 ii CÁC KÝ HIỆU, CHỮ VIẾT TẮT Viết tắt Tiếng Anh AES Advanced Encryption Standard API CBC Chuẩn mã hoá tiên tiến Application Programming Giao diện lập trình Interface ứng dụng Cipher Block Chaining Chuỗi khối mật mã DAC Discretionary Access Control DBMS Database Management System MAC Message Authentication Code PBKDF2 Tiếng Việt Điều khiển truy cập tuỳ quyền Hệ quản trị sở liệu Mã xác thực thông báo Password Based Key Derivation Hàm dẫn xuất khoá Function dựa mật PKI Public Key Infrastructure TDE Transparent Data Encryption SHA Secure Hash Algorithm iii Hạ tầng khố cơng khai Mã hoá liệu suốt Giải thuật băm an toàn LỜI MỞ ĐẦU Hiện nay, thiết bị di động ngày sử dụng hoạt động hàng ngày, chúng trở thành lưu trữ di động, lưu trữ nhiều thông tin cá nhân người dùng Hầu hết hệ điều hành di động, bao gồm Android lưu trữ liệu sở liệu cung cấp API cho ứng dụng truy cập sở liệu hệ thống quản lý để quản lý sở liệu Tuy nhiên đa phần ứng dụng lưu trữ liệu rõ tập tin sở liệu nó, kết nội dung sở liệu bị rị rỉ ngồi ý muốn Việc lựa chọn sở liệu để đáp ứng yêu cầu lưu trữ bảo mật thông tin cần thỏa mãn đầy đủ nhu cầu: sở liệu nhúng, dung lượng nhỏ, thiết kế cài đặt đơn giản, dễ thao tác thiết bị di động Và SQLite ví dụ điển hình xuất sắc, đáp ứng đầy đủ nhu cầu để trở thành sở liệu tối ưu để lưu trữ liệu ứng dụng di động Song song với đó, bên cạnh lưu trữ bảo mật liệu vấn đề quan trọng Dữ liệu nằm sở liệu quý giá sở liệu cần có mức độ bảo mật cao, để bảo vệ bảo đảm an tồn liệu có sở liệu thiết bị di động Để đáp ứng nhu cầu bảo mật trên, SQLCipher giải pháp bảo mật tiêu biểu Việc tích hợp SQLCipher bảo đảm liệu suốt với người dùng; hoạt động hiệu với sở liệu có kích thước lớn; mã hóa liệu sở liệu SQLite,… vii Đồ án gồm chương cụ thể sau: Chương 1: Tổng quan sở liệu SQLite Chương tìm hiểu sở liệu hệ quản trị sở liệu thiết bị di động; An tồn thơng tin sở liệu; Tổng quan sở liệu SQLite chế hoạt động SQLite Android Chương 2: Giải pháp bảo mật sở liệu SQLite sử dụng SQLCipher Chương trình bày nguy gây an toàn cho sở liệu SQLite; Cơ chế bảo mật cho sở liệu SQLite tìm hiểu đặc điểm, tính bảo mật cách thức hoạt động SQLCipher Chương 3: Xây dựng ứng dụng có bảo mật hệ điều hành Android Chương xây dựng ứng dụng có bảo mật sở liệu SQLite cho thiết bị di động dùng hệ điều hành Android sử dụng SQLCipher viii CHƯƠNG 1: TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU SQLITE 1.1 Cơ sở liệu hệ quản trị sở liệu thiết bị di động Dữ liệu thơng tin liên quan đến đối tượng (ví dụ người, vật, việc, ) Dữ liệu mô tả nhiều dạng khác (như ký tự, ký hiệu, hình ảnh, âm ) Dữ liệu đối tượng khác tùy thuộc vào mục đích quản lý Ví dụ: Cùng liệu đối tượng sinh viên với mục đích quản lý khác khác nhau, cụ thể sau: - Với mục đích quản lý điểm, liệu đối tượng sinh viên bao gồm: Tên, Mã sinh viên, Điểm môn 1, Điểm môn 2, Điểm môn - Với mục đích quản lý thơng tin cá nhân, liệu đối tượng sinh viên bao gồm: Tên, Địa chỉ, Ngày sinh, Quê quán, Lớp Cơ sở liệu thiết bị di động tập hợp liệu tổ chức cách có cấu trúc liên quan với lưu trữ thiết bị Cơ sở liệu thiết kế, xây dựng cho phép người dùng lưu trữ liệu, truy xuất thông tin cập nhật liệu Tất sở liệu Android lưu trữ thư mục /data/data//databases thiết bị máy ảo Hệ quản trị sở liệu tập chương trình cho phép người dùng tạo lập trì sở liệu Các thao tác sở liệu hỗ trợ thực gồm: - Định nghĩa: Khai báo kiểu, cấu trúc ràng buộc liệu - Xây dựng: Liên quan đến việc lưu trữ liệu phương tiện lưu trữ hệ quản trị sở liệu quản lý - Xử lý: Cho phép thực thao tác truy vấn, thêm, sửa, xóa liệu - Chia sẻ: Cho phép nhiều người dùng truy nhập, chia sẻ liệu 1.2 An tồn thơng tin sở liệu 1.2.1 Yêu cầu để đảm bảo an toàn cho sở liệu Việc tổ chức, lưu trữ thơng tin nói chung triển khai nhiều hình thức cơng nghệ khác nhau, sử dụng phần mềm phương tiện lưu trữ khác nhau, việc sử dụng sở liệu để lưu trữ thông tin phổ biến Do vậy, việc đảm bảo an toàn cho sở liệu vấn đề cấp thiết phải xác định từ ban đầu Bảo mật hay an toàn cho sở liệu (Database Security) tập hợp thủ tục, chuẩn, sách công cụ sử dụng để bảo vệ liệu nhằm tránh bị trộm cắp, lạm dụng, đột nhập, cơng, hành động khơng mong muốn khác Nói cách khác, mục đích việc bảo mật hay an toàn cho sở liệu để đảm bảo thuộc tính an tồn sở liệu, bao gồm tính bí mật (Confidentiality), tính tồn vẹn (Integrity) tính sẵn sàng (Availability) Trong đó: - Tính bí mật: Đảm bảo có người dùng có thẩm quyền (Authorised Users) truy nhập thực thao tác sở liệu Tính bí mật đảm bảo thơng qua chế kiểm soát truy nhập bao gồm xác thực (Authentication) trao quyền (Authorisation) vào đối tượng sở liệu Ngồi tính bí mật đảm bảo nhiều biện pháp bảo mật bổ sung, bảo vệ vật lý, tường lửa, mã hóa,… - Tính tồn vẹn: Đảm bảo liệu sửa đổi người dùng có thẩm quyền Tính tồn vẹn liên quan đến tính hợp lệ (Validity), tính quán (Consistency) xác (Accuracy) liệu Dữ liệu xem toàn vẹn khơng bị thay đổi, hợp lệ xác Tính tồn vẹn đảm bảo ràng buộc liệu (Constraints), phép kiểm tra chế xử lý liệu - Tính sẵn sàng: Đảm bảo sở liệu truy nhập người dùng hợp pháp họ u cầu Tính sẵn sàng có liên quan mật thiết đến hạ tầng mạng lực máy chủ sở liệu đảm bảo chuỗi máy chủ sở liệu hệ thống cân tải Tính sẵn sàng đo yếu tố: + Thời gian cung cấp dịch vụ (Uptime); + Thời gian ngừng cung cấp dịch vụ (Downtime); + Tỷ lệ phục vụ: A = (Uptime)/(Uptime + Downtime); + Thời gian trung bình cố; + Thời gian trung bình ngừng để sửa chữa; + Thời gian khơi phục sau cố Với yêu cầu an toàn sở liệu nêu trên, dễ dàng nhận thấy mối đe dọa cho sở liệu sau: - Sự thất thơng tin khơng hợp lý, điều đe dọa tính bí mật liệu - Thay đổi liệu không hợp lý, điều đe dọa tính tồn vẹn liệu - Từ chối dịch vụ, điều đe dọa tính sẵn sàng liệu 1.2.2 Các yếu tố liên quan đến an toàn sở liệu An toàn sở liệu liên quan đến ba yếu tố: Con người (People), Phần mềm (Software) Dữ liệu (Data) Hình 1.1 Bảo mật sở liệu yếu tố liên quan Đồng thời, nhân tố liên quan đến bảo mật sở liệu mơ hình bao gồm: Các mối đe dọa (Threats), Các rủi ro (Ricks) Các lỗ hổng (Vulnerabilities) Hình 1.2 Các mối đe doạ bảo mật sở liệu Các mối đe dọa bảo mật sở liệu minh họa Hình 1.2 bao gồm loại: đe dọa đến từ người (People), từ mã độc (Malicious code), từ thảm họa công nghệ (Technological disasters) thảm hoạ thiên nhiên (Natural diasters) Trong số mối de dọa nêu trên, mối đe dọa đến từ người dùng ác tính, tin tặc mã độc có mức nguy hiểm cao Điều với thống kê Top 10 mối đe dọa bảo mật sở liệu theo hãng Imperva thực năm 2015: Excessive and Unused Privileges (Đặc quyền mức không sử dụng) Privilege Abuse (Lạm dụng đặc quyền) Input Injection (Chèn mã đầu vào) Malware (Mã độc) Weak Audit Trail (Log kiểm toán yếu) Storage Media Exposure (Rò rỉ liệu từ phương tiện lưu trữ) Exploitation of Vulnerabilities and Misconfigured Databases (Khai thác lỗi hổng cấu hình sở liệu sai) - Xố thơng tin tài khoản - Thay đổi mật 3.3 Xây dựng ứng dụng SQLCipher Android 3.3.1 Cơ sở liệu Tại mục 1.3 Chương tìm hiểu chung SQLite biết SQLite sở liệu quan hệ tích hợp sẵn hệ điều hành Android khơng cần cấu hình thêm Ứng dụng My Account yêu cầu lưu trữ tài khoản quan trọng người dùng Cơ sở liệu gồm bảng “accounts” gồm trường: Tên trường Kiểu liệu Ràng buộc Diễn giải Id Integer Khố Type Text Loại tài khoản User Text Tên đăng nhập Pass Text Mật Primary key autoincrement Bảng 3.1 Mô tả sở liệu bảng Account 3.3.2 Tích hợp SQLCipher Android - Bước 1: Tạo project có tên “My Account” Hình 3.1 Tạo project 50 - Bước 2: Tích hợp phiên cộng đồng Phiên cộng đồng SQLCipher cho Android phân phối thơng qua định dạng gói AAR cho phép sử dụng dự án Android dựa Java Kotlin Tích hợp Gradle thực cách thêm mục sau vào dependencies app/build.gradle: implementation ‘net.zetetic:android-databases-sqlcipher:4.4.0@aar’ implementation “android.sqlite:sqlite: 2.0.1” Hình 3.2 Tích hợp thư viện SQLCipher - Bước 3: Trỏ vào thư mục “java” chọn “com.android.myaccount” tạo class có tên “DBManager” mở rộng từ SQLiteOpenHelper Trong class DBManager khởi tạo sở liệu có tên “account_sqlcipher”, tạo bảng có tên “accounts” gồm trường id, type, user, pass khai báo kiểu liệu cho trường: 51 + Tạo hàm truy vấn: +Tạo hàm thêm tài khoản: 52 + Tạo hàm sửa tài khoản: + Tạo hàm xoá tài khoản: 3.3.3 Giao diện 3.3.3.1 Giao diện đăng nhập Lần đầu vào ứng dụng, người dùng yêu cầu nhập mật (đây khố để mã hoá giải mã sở liệu) nhập lại mật Giao diện hiển thị Hình 3.3 đây: 53 Hình 3.3 Giao diện đăng nhập Ô nhập mật kiểm tra định dạng để giúp mật mạnh với yêu cầu sau: - Phải có tối thiểu kí tự - Phải có tối thiểu chữ số - Phải có tối thiểu chữ hoa - Phải có tối thiểu chữ thường - Phải có tối thiểu ký tự đặc biệt: @#$%^&+=! - Không chứa khoảng cách 54 Hình 3.4 Kết thị kiểm tra nhập định dạng mật Khi người dùng nhập sai định dạng ô nhập mật khẩu, mật nhập lại mật khơng khớp thông báo lỗi tương ứng vô hiệu hoá nút ĐĂNG NHẬP người dùng nhập đủ, hết yêu cầu nút ĐĂNG NHẬP kích hoạt trở lại vào ứng dụng Ngoài ra, mật ẩn dạng dấu chấm để người lạ không đánh cắp mật Sẽ có biểu tượng mắt bên cạnh ô nhập mật nhập lại mật khẩu; nhấn vào đó, mật hiển thị Từ lần sau, người dùng cần nhập mật nhập lần để vào ứng dụng Nếu nhập sai nhận thông báo số lần đăng nhập sai Hình 3.5 Nếu nhập sai lần ứng dụng 55 Hình 3.5 Thông báo lỗi nhập sai mật lần 3.3.3.2 Giao diện thao tác lưu trữ thông tin tài khoản • Thêm ghi: Điền đầy đủ thông tin vào ô trống “Loại tài khoản”, “Tên đăng nhập”, “Mật khẩu” ấn “LƯU” để tiến hành thêm ghi Sau lưu thành công hiển thị danh sách tài khoản Các tài khoản lưu thành cơng hiển thị Hình 3.6: 56 Hình 3.6 Danh sách tài khoản • Sửa ghi: Để chỉnh sửa ghi, ví dụ ghi có “ID = 2”, chạm vào ghi số 2, thông tin chỉnh sửa hiển thị ô edit text, ấn “CẬP NHẬT” để lưu liệu thay đổi Giao diện ứng dụng thay đổi ghi “ID= 2” Hình 3.7 đây: Hình 3.7 Danh sách sau chỉnh sửa ghi số 57 • Xoá ghi: Để xoá ghi, tiến hành nhấn giữ vào ghi muốn xoá Sau xố thành cơng, giao diện xuất thơng báo “Xố thành cơng” Giao diện ứng dụng xố ghi “ID = 2” Hình 3.8: Hình 3.8 Danh sách sau xoá ghi 3.3.3.3 Giao diện thay đổi mật Để thay đổi mật ứng dụng, ấn “PASSWORD”, giao diện thay đổi mật hiển thị Hình 3.9: 58 Hình 3.9 Giao diện thay đổi mật Tại đây, ô nhập mật kiểm tra định dạng phần Đăng nhập Ngoài ấn nút OK, nhập sai : ➢ Mật tại: người dùng thấy thông báo lỗi “Mật không đúng” ➢ Mật khác Nhập lại mật mới: người dùng thấy thông báo lỗi “Mật không khớp” Nếu thỏa mãn điều kiện cho đổi mật khẩu, hàm thay đổi mật sở liệu mở dùng “sqlite3_rekey()” - giới thiệu mục 2.3.6 Đổi mật thành công giao diện danh sách tài khoản hiển thị thông báo “Đổi mật thành công” 3.3.4 Đánh giá Sau tích hợp SQLCipher, sở liệu người dùng bị lộ lọt kẻ xấu khơng thể đọc thơng tin sở liệu mã hóa 59 Hình 3.10 CSDL sau mã hoá SQLCipher Ứng dụng đạt yêu cầu mà mục 3.2 nêu Quan trọng đảm bảo tính mã hố, thiết bị bị root, dù có lấy tập tin sở liệu khơng thể mở được, đưa DB Browser (SQLite) nhận thơng báo lỗi sau: Hình 3.11 Lỗi đọc CSDL mã hố DB Browser (SQLite) Vì file mã hố nên đọc theo cách thông thường dùng DB Browser (SQLite) Cần dùng DB Browser (SQLCipher) để đọc nhập mật Hình 3.12 đây: 60 Hình 3.12 Mở CSDL DB Browser (SQLCipher) Nhập sai mật thông báo lỗi, không mở sở liệu SQLite Sau nhập key xem sở liệu mã hố Hình 3.13 Xem CSDL mã hố 3.4 Kết luận chương Việc tích hợp SQLCipher để mã hoá liệu sở liệu SQLite thực dễ dàng thông qua hàm thư viện, cho phép mã hoá 100% liệu lưu trữ sở liệu SQLite Chương tiến hành xây dựng ứng dụng có bảo mật cho sở liệu SQLite thiết bị di động dùng hệ điều hành 61 Android dùng SQLCipher Ứng dụng kết có chức chức bảo mật, đáp ứng yêu cầu toán đặt 62 KẾT LUẬN * Một số nội dung đạt được đồ án: - Tìm hiểu sở liệu SQLite chế hoạt động SQLite Android - Tìm hiểu giải pháp bảo mật cho sở liệu SQLite dùng SQLCipher Trình bày đặc điểm, hướng tiếp cận, tính bảo mật SQLCipher API SQLCipher - Xây dựng ứng dụng có bảo mật cho sở liệu SQLite thiết bị di động để bảo mật thông tin sở liệu quản lý thông tin như: Đăng nhập, sửa, xoá với sở liệu bảo mật sở liệu SQLCipher 63 TÀI LIỆU THAM KHẢO [1] Tổng quan SQLite https://www.sqlite.org/ [2] Zetetic, SQLCipher https://www.zetetic.net/sqlcipher/ [3] Sunny Kumar Aditya, Vikash Kumar Karn, Android SQLite Enssentials [4] Hezal Lopes, Rahul Lopes, Comparative Analysis of Mobile Security Threats And Solution, International Journal of Engineering Research and Applications Record 3, 2013 [5] Rachmawan Ardiansa, Developing secure Android application with encryted database file using SQLCipher, UteM, 2014 [6] ThS Nghiêm Thị Hương, Hệ quản trị sở liệu SQLite thiết bị di động ứng dụng, Trường Đại học Công nghệ - Đại học Quốc gia Hà Nội, 2014 [7] TS Hoàng Xuân Dậu, Bài giảng an toàn ứng dụng Web Cơ sở liệu, Học viện Công nghệ Bưu viễn thơng, 2017 [8] ThS Nguyễn Duy Thanh, Cách sử dụng SQLite Andoid https://duythanhcse.wordpress.com/2013/06/12/bai-tap-31-cach-su-dungsqlite-trong-android/, 20 64