1. Trang chủ
  2. » Luận Văn - Báo Cáo

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ĩ)

70 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề 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
Tác giả Nguyen Thanh Long
Trường học Viện Công Nghệ Thông Tin Và Truyền Thông, Đại Học Bách Khoa Hà Nội
Chuyên ngành Khoa học máy tính, Công nghệ Thông tin
Thể loại Luận văn Thạc sĩ
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 70
Dung lượng 1,17 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU SQLITE (6)
    • 1.1. Cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu trên thiết bị di động (0)
    • 1.2. An toàn thông tin trong cơ sở dữ liệu (7)
      • 1.2.1. Yêu cầu để đảm bảo an toàn cho cơ sở dữ liệu (8)
      • 1.2.2. Các yếu tố liên quan đến an toàn cơ sở dữ liệu (9)
      • 1.2.3. Các cơ chế để bảo vệ tính an toàn của cơ sở dữ liệu (13)
    • 1.3. Tổng quan về hệ quản trị cơ sở dữ liệu SQLite (0)
      • 1.3.1. Giới thiệu chung về hệ quản trị cơ sở dữ liệu SQLite (14)
      • 1.3.2. Đặc trưng của hệ quản trị cơ sở dữ liệu SQLite (16)
      • 1.3.3. Hiệu suất hoạt động và hạn chế của SQLite (20)
    • 1.4. Cơ chế hoạt động của SQLite trên môi trường Android (21)
      • 1.4.1. Lưu trữ dữ liệu (21)
      • 1.4.2. Sử dụng SQLite trong Android (23)
    • 1.5. Kết luận chương (29)
  • CHƯƠNG 2: GIẢI PHÁP BẢO MẬT CƠ SỞ DỮ LIỆU SQLITE SỬ DỤNG (30)
    • 2.1. Các nguy cơ gây mất an toàn cho cơ sở dữ liệu SQLite (0)
    • 2.2. Cơ chế bảo mật cho SQLite (31)
      • 2.2.1. Mức độ an ninh trong cơ sở dữ liệu (31)
      • 2.2.2. Cơ chế bảo mật cho SQLite (31)
    • 2.3. Giải pháp bảo mật cơ sở dữ liệu SQLite sử dụng SQLCipher (0)
      • 2.3.1. Giới thiệu SQLCipher (33)
      • 2.3.2. Đặc trưng (35)
      • 2.3.3. Thiết kế (35)
      • 2.3.4. Tính năng bảo mật (36)
      • 2.3.5. Đặc điểm mới của SQLCipher phiên bản 4.4.0 trở lên (37)
      • 2.3.6. SQLCipher API (38)
      • 2.3.7. Thao tác mã hoá cơ sở dữ liệu với SQLCipher (53)
    • 2.4. Kết luận chương (54)
  • CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG CÓ BẢO MẬT TRÊN HỆ ĐIỀU HÀNH ANDROID (6)
    • 3.1. Đặt bài toán (55)
    • 3.2. Phân tích bài toán và đề xuất giải pháp (0)
    • 3.3. Xây dựng ứng dụng SQLCipher trên Android (56)
      • 3.3.1. Cơ sở dữ liệu (56)
      • 3.3.2. Tích hợp SQLCipher trên Android (56)
      • 3.3.3. Giao diện (59)
      • 3.3.4. Đánh giá (65)
    • 3.4. Kết luận chương (67)
  • KẾT LUẬN (69)
  • TÀI LIỆU THAM KHẢO (70)

Nội dung

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

TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU SQLITE

An toàn thông tin trong cơ sở dữ liệu

1.2.1 Yêu cầu để đảm bảo an toàn cho cơ sở dữ liệu

Việc tổ chức và lưu trữ thông tin có thể thực hiện qua nhiều hình thức và công nghệ khác nhau, với sự hỗ trợ của các phần mềm và phương tiện lưu trữ đa dạng Trong số đó, việc sử dụng cơ sở dữ liệu để lưu trữ thông tin ngày càng trở nên phổ biến.

Do vậy, việc đảm bảo an toàn cho cơ sở dữ liệu là vấn đề cấp thiết và phải được xác định ngay từ ban đầu

Bảo mật cơ sở dữ liệu là tập hợp các thủ tục, chuẩn, chính sách và công cụ nhằm bảo vệ dữ liệu khỏi trộm cắp, lạm dụng và tấn công Mục tiêu chính của bảo mật cơ sở dữ liệu là đảm bảo ba thuộc tính cơ bản: tính bí mật, tính toàn vẹn và tính sẵn sàng.

Để đảm bảo tính bí mật của cơ sở dữ liệu, chỉ những người dùng có thẩm quyền mới được phép truy cập và thực hiện các thao tác Điều này được thực hiện thông qua các cơ chế kiểm soát truy cập như xác thực và trao quyền Bên cạnh đó, tính bí mật còn được củng cố bởi các biện pháp bảo mật bổ sung như bảo vệ vật lý, tường lửa và mã hóa.

Tính toàn vẹn của dữ liệu đảm bảo rằng chỉ những người dùng có thẩm quyền mới có thể sửa đổi thông tin Nó liên quan đến tính hợp lệ, tính nhất quán và độ chính xác của dữ liệu Dữ liệu được coi là toàn vẹn khi không bị thay đổi, hợp lệ và chính xác Để duy trì tính toàn vẹn, cần áp dụng các ràng buộc dữ liệu, các phép kiểm tra và các cơ chế xử lý dữ liệu hiệu quả.

Tính sẵn sàng của cơ sở dữ liệu là yếu tố quan trọng, đảm bảo người dùng hợp pháp có thể truy cập dữ liệu bất cứ lúc nào Yếu tố này phụ thuộc vào hạ tầng mạng và khả năng của các máy chủ cơ sở dữ liệu.

3 bảo bằng chuỗi máy chủ cơ sở dữ liệu và hệ thống cân bằng tải Tính sẵn sàng có thể được đo bằng các 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 giữa các sự cố;

+ Thời gian trung bình ngừng để sửa chữa;

+ Thời gian khôi phục sau sự cố

Với các yêu cầu về an toàn cơ sở dữ liệu, có thể nhận diện các mối đe dọa tiềm ẩn đối với cơ sở dữ liệu như sau:

- Sự thất thoát thông tin không hợp lý, điều này đe dọa tính bí mật của dữ liệu

- Thay đổi dữ liệu không hợp lý, điều này đe dọa tính toàn vẹn của dữ liệu

- Từ chối dịch vụ, điều này đe dọa tính sẵn sàng của dữ liệu

1.2.2 Các yếu tố liên quan đến an toàn cơ sở dữ liệu

An toàn cơ sở dữ liệu liên quan đến ba yếu tố: Con người (People), Phần mềm (Software) và Dữ liệu (Data)

Hình 1.1 Bảo mật cơ sở dữ liệu và các yếu tố liên quan

Các yếu tố liên quan đến bảo mật cơ sở dữ liệu trong mô hình này bao gồm các mối đe dọa, rủi ro và lỗ hổng.

Hình 1.2 Các mối đe doạ bảo mật cơ sở dữ liệu

Các mối đe dọa đối với bảo mật cơ sở dữ liệu được phân loại thành bốn loại chính: đe dọa từ con người, mã độc, thảm họa công nghệ và thảm họa thiên nhiên Trong đó, đe dọa từ người dùng ác tính, bao gồm tin tặc và mã độc, được coi là nguy hiểm nhất Điều này cũng được xác nhận bởi thống kê Top 10 mối đe dọa đối với bảo mật cơ sở dữ liệu do hãng Imperva thực hiện vào năm 2015.

1 Excessive and Unused Privileges (Đặc quyền quá mức hoặc không sử dụng)

2 Privilege Abuse (Lạm dụng đặc quyền)

3 Input Injection (Chèn mã đầu vào)

5 Weak Audit Trail (Log kiểm toán yếu)

6 Storage Media Exposure (Rò rỉ dữ liệu từ phương tiện lưu trữ)

7 Exploitation of Vulnerabilities and Misconfigured Databases (Khai thác lỗi hổng và cấu hình cơ sở dữ liệu sai)

8 Unmanaged Sensitive Data (Các dữ liệu nhạy cảm không được quản lý)

9 Denial of Service (Tấn công từ chối dịch vụ)

10 Limited Security Expertise and Education (Kiến thức chuyên gia và đào tạo về bảo mật hạn chế)

Hình 1.3 Các rủi ro bảo mật cơ sở dữ liệu

Hình 1.3 chỉ ra bốn nguồn rủi ro chính đối với bảo mật cơ sở dữ liệu, bao gồm rủi ro từ con người, dữ liệu, phần cứng và sự tín nhiệm.

Hình 1.4 Các lỗ hổng bảo mật cơ sở dữ liệu

Hình 1.4 trình bày bốn loại lỗ hổng bảo mật cơ sở dữ liệu, bao gồm lỗ hổng do người dùng (User mistakes), lỗ hổng do thiết kế và lập trình (Design and Programming flaws).

Software vulnerabilities, particularly those arising from user actions and installation or configuration issues, are among the most common and high-risk types.

Mô hình bảo mật cơ sở dữ liệu tổng quát:

Hình 1.5 Mô hình bảo mật cơ sở dữ liệu tổng quát

Mô hình bảo mật cơ sở dữ liệu tổng quát được mô tả trong Hình 1.5, nhằm giảm thiểu các yếu tố có thể truy cập trực tiếp đến dữ liệu và bề mặt tấn công Mô hình này bao gồm 7 lớp: lớp con người (People), lớp ứng dụng (Applications), lớp mạng (Network), lớp hệ điều hành (Operating System), lớp hệ quản trị cơ sở dữ liệu (DBMS), lớp file dữ liệu (Data Files) và lớp dữ liệu (Data).

Hình 1.6 Phương pháp thực hiện bảo mật cơ sở dữ liệu

Dựa trên mô hình bảo mật cơ sở dữ liệu tổng quát, phương pháp thực hiện bảo mật cơ sở dữ liệu được mô tả qua các khâu tương ứng với quy trình phát triển phần mềm Các khâu này bao gồm: Nhận dạng rủi ro, Đánh giá rủi ro, Thiết kế các kiểm soát, Áp dụng các kiểm soát, Đánh giá hiệu quả áp dụng và Kiểm toán Kết quả từ khâu kiểm toán sẽ được sử dụng làm phản hồi để điều chỉnh các khâu trước đó cho phù hợp.

1.2.3 Các cơ chế để bảo vệ tính an toàn của cơ sở dữ liệu

Để đảm bảo an toàn cho dữ liệu và cơ sở dữ liệu, việc bảo vệ ứng dụng truy cập cơ sở dữ liệu là rất quan trọng Có nhiều kỹ thuật và cơ chế bảo vệ tính an toàn của cơ sở dữ liệu, trong đó mã hóa và băm là hai phương pháp phổ biến Mã hóa giúp bảo vệ dữ liệu trong cơ sở dữ liệu, trong khi băm cung cấp một lớp bảo vệ bổ sung cho toàn bộ cơ sở dữ liệu.

Mã hoá là quá trình sử dụng các giải thuật mã hoá với khoá để bảo vệ dữ liệu, thường áp dụng các giải thuật mã hoá khối đối xứng Một số giải thuật mã hoá phổ biến bao gồm DES, 3DES, AES, RC2 và RC4.

Tổng quan về hệ quản trị cơ sở dữ liệu SQLite

Các hàm mã hóa và giải mã dữ liệu có thể được thực hiện trực tiếp trên máy chủ cơ sở dữ liệu, cho phép mã hóa dữ liệu khi ghi vào và giải mã khi đọc từ cơ sở dữ liệu Công nghệ Transparent Data Encryption (TDE) hỗ trợ mã hóa từng khối dữ liệu, giúp bảo vệ thông tin nhạy cảm Nhiều hệ quản trị cơ sở dữ liệu như MS-SQL, Oracle và IBM DB2 đều hỗ trợ công nghệ TDE.

Mã hóa và giải mã dữ liệu tại lớp ứng dụng là rất quan trọng Thư viện API của ứng dụng cung cấp các hàm mã hóa và giải mã mạnh mẽ, do đó, việc sử dụng các cơ chế mã hóa ở mức ứng dụng là cần thiết để bảo vệ thông tin.

Mã hóa dữ liệu trong bảng có thể làm khó khăn cho việc lập chỉ số và tìm kiếm Do đó, cần cân nhắc kỹ lưỡng các dữ liệu cần mã hóa và lựa chọn phương pháp mã hóa phù hợp Đối với các trường dữ liệu thường xuyên được lập chỉ số và tìm kiếm, đặc biệt là các trường khóa, không nên thực hiện mã hóa.

Mã hóa mang lại sự minh bạch cho người sử dụng, nhưng có thể làm tăng tải cho máy chủ cơ sở dữ liệu hoặc máy chủ ứng dụng Vì vậy, việc lựa chọn phương pháp mã hóa và xác định phần dữ liệu cần mã hóa là rất quan trọng.

Cơ sở dữ liệu trên thiết bị di động áp dụng nhiều kỹ thuật bảo mật để bảo vệ thông tin SQLite, một loại cơ sở dữ liệu phổ biến, có thể kết hợp với các công cụ mã hóa như SQLCipher nhằm đảm bảo an toàn cho dữ liệu được lưu trữ.

1.3 Tổng quan về hệ quản trị cơ sở dữ liệu SQLite

1.3.1 Giới thiệu chung về hệ quản trị cơ sở dữ liệu SQLite

SQLite là một cơ sở dữ liệu nhúng mã nguồn mở, được phát hành vào năm 2000 Đây là thư viện điều khiển thực thi độc lập, không cần cấu hình Mã nguồn của SQLite được công khai và cho phép sử dụng miễn phí cho mọi mục đích.

Ứng dụng này tích hợp sẵn trên Android, phục vụ cả mục đích thương mại và cá nhân Nó được thiết kế để cung cấp các phương pháp hiệu quả cho việc quản lý dữ liệu mà không cần chi phí quản lý cao như các hệ thống quản trị cơ sở dữ liệu quan hệ chuyên dụng.

Hình 1.7 Logo của hệ quản trị cơ sở dữ liệu SQLite 1.3.1.2 Khả năng nhúng

SQLite là một cơ sở dữ liệu nhúng, tích hợp trực tiếp vào ứng dụng và hoạt động như một máy chủ quản lý dữ liệu Mã nguồn của SQLite được biên dịch cùng với mã chương trình, giúp dễ dàng sử dụng mà không cần cấu hình phức tạp như kết nối mạng hay yêu cầu thông tin đăng nhập Khi ứng dụng được cài đặt trên thiết bị, nó vẫn hoạt động hiệu quả ngay cả khi không có kết nối mạng Tập tin cơ sở dữ liệu SQLite là một tập tin duy nhất, nhỏ gọn, lưu trữ toàn bộ dữ liệu của ứng dụng, cho phép thực hiện các thao tác như chèn, sửa, xóa và tìm kiếm dễ dàng Việc chạy đồng thời ứng dụng và máy chủ trong cùng một quá trình giúp giảm chi phí kết nối mạng, đơn giản hóa quản lý cơ sở dữ liệu và dễ dàng triển khai ứng dụng.

Thông thường, các ứng dụng di động tích hợp cơ sở dữ liệu bên trong, tạo ra sản phẩm hoàn chỉnh với chức năng và dữ liệu Những ứng dụng này thường được phân phối qua các chợ công nghệ như Google Play, App Store và Windows Store Các nhà phát triển thường ưu tiên bán ứng dụng mà không phải chịu nhiều chi phí bảo trì và quản lý dữ liệu, do đó họ thường chọn cách đóng gói chương trình cùng với cơ sở dữ liệu.

1.3.1.3 SQLite là cơ sở dữ liệu của nhà phát triển Đối với các nhà phát triển ứng dụng, SQLite là hệ quản trị cơ sở dữ liệu linh hoạt SQLite được biết đến như là một cơ sở dữ liệu, là thư viện lập trình và là công cụ dòng lệnh rất dễ sử dụng Có nhiều cách sử dụng SQLite như: môi trường nhúng, website, dịch vụ hoạt động hệ thống, các tập lệnh và ứng dụng Ngoài ra, với một số lý do như: không có hệ quản trị cơ sở dữ liệu bên ngoài hoặc không cấu hình mạng hoặc không cần tên người dùng và mật khẩu nên SQLite là cơ sở dữ liệu tốt cho việc phát triển và kiểm thử

SQLite không chỉ nổi bật với chức năng lưu trữ dữ liệu mà còn cung cấp các công cụ hữu ích cho việc xử lý dữ liệu Tùy thuộc vào kích thước và độ phức tạp, SQLite có khả năng biểu diễn các cấu trúc dữ liệu ứng dụng dưới dạng bảng hoặc nhiều bảng trong cơ sở dữ liệu Người dùng có thể thực hiện các truy vấn dữ liệu tương tự như với các hệ thống cơ sở dữ liệu khác.

Đối với lập trình viên phát triển ứng dụng Android, việc sử dụng SQLite để tạo và nhúng cơ sở dữ liệu vào ứng dụng là rất đơn giản Nhà phát triển có thể sử dụng SQLite Manager hoặc công cụ dòng lệnh để tạo cơ sở dữ liệu, với các công cụ này dễ dàng cài đặt và không phức tạp, chẳng hạn như SQLite Manager đã được tích hợp sẵn trong Firefox.

1.3.2 Đặc trưng của hệ quản trị cơ sở dữ liệu SQLite

SQLite được thiết kế để hoạt động mà không cần quản trị viên hệ thống Việc cấu hình và quản lý SQLite rất đơn giản, với đầy đủ chức năng tích hợp sẵn, cho phép người dùng sử dụng như một hệ thống hoàn chỉnh mà không cần can thiệp vào bên trong.

- Tính di động, khả chuyển:

SQLite được thiết kế với tính di động cao, cho phép biên dịch và chạy trên nhiều hệ điều hành như Windows, Linux, BSD, OS X, và các hệ điều hành Unix như Solaris, HPUX và AIX Nó cũng tương thích với nhiều nền tảng nhúng như QNX, VxWorks, Symbian, Palm OS và Windows CE, hoạt động trên các kiến trúc 16, 32 và 64 bit với các thứ tự byte khác nhau Tập tin cơ sở dữ liệu SQLite có định dạng nhị phân, tương thích trên tất cả các hệ điều hành và kiến trúc phần cứng mà SQLite hỗ trợ Người dùng có thể tạo cơ sở dữ liệu trên nhiều công cụ và thiết bị, bao gồm cả điện thoại di động, mà không cần chuyển đổi hay sửa đổi Ngoài ra, SQLite có khả năng lưu trữ lên đến 2 terabyte dữ liệu và hỗ trợ hai kiểu mã hóa UTF-8 và UTF-16.

- Bộ thư viện quản lý rất nhỏ, gọn:

Bản đầy đủ tính năng của SQLite có kích thước dưới 500 KB, và có thể nhỏ hơn nếu loại bỏ một số đặc tính Cụ thể, phiên bản SQLite 3.7.17 có kích thước dưới 350 KB trên hệ điều hành 32 bit và dưới 409 KB trên hệ thống 64 bit.

Cơ chế hoạt động của SQLite trên môi trường Android

SQLite là một hệ quản trị cơ sở dữ liệu nhẹ, tích hợp trong các thư viện hỗ trợ khung ứng dụng như SSL, OpenGL ES và Webkit Những thư viện này được phát triển bằng ngôn ngữ C/C++ và hoạt động trên nền tảng Linux, cùng với Android Runtime, tạo nên nền tảng vững chắc cho các ứng dụng.

Trước khi bắt đầu khám phá SQLite trong ứng dụng Android, hãy xem các phương án lưu trữ thay thế trong Android

Android cung cấp nhiều tùy chọn lưu trữ dữ liệu ứng dụng, với giải pháp được chọn dựa trên nhu cầu cụ thể của từng tình huống Các yếu tố cần xem xét bao gồm dung lượng lưu trữ, loại dữ liệu cần lưu trữ và mức độ riêng tư của dữ liệu đối với người dùng Một số tùy chọn lưu trữ dữ liệu trên Android bao gồm:

- Lưu trữ dữ liệu nội bộ (Internal Storage): Lưu trữ tệp riêng tư của ứng dụng (app-private files) trên hệ thống tệp của thiết bị

Lưu trữ tệp bên ngoài đề cập đến việc lưu trữ dữ liệu trên hệ thống tệp được chia sẻ, cho phép người dùng dễ dàng chia sẻ các tệp như hình ảnh và video.

- Shared preferences: Lưu trữ dữ liệu riêng tư trong các cặp key-value

- Database: Lưu trữ dữ liệu có cấu trúc trong dữ liệu riêng tư

1.4.1.1 Lưu trữ dữ liệu nội bộ

Lưu trữ dữ liệu nội bộ (Internal Storage) là nơi lưu trữ dữ liệu cá nhân của từng ứng dụng, và các dữ liệu này chỉ được sử dụng riêng cho ứng dụng đó Khi ứng dụng bị gỡ bỏ khỏi thiết bị Android, tất cả các tập tin dữ liệu trong bộ nhớ nội bộ sẽ bị xóa Khi làm việc với các tập tin dữ liệu ở bộ nhớ trong, người dùng chỉ có thể sử dụng tên tập tin đơn giản mà không thể truy cập vào tên tập tin có đường dẫn.

1.4.1.2 Lưu trữ dữ liệu bên ngoài

Lưu trữ dữ liệu bên ngoài (External Storage) trên Android là khu vực lưu trữ các tập tin dữ liệu mà bạn lưu trữ, tuy nhiên, các tập tin này không được bảo vệ bởi hệ thống.

Có hai loại lưu trữ ngoài phổ biến: lưu trữ trên ổ cứng điện thoại và lưu trữ trên thẻ nhớ (SD card) Dữ liệu được tạo ra không bị ràng buộc bởi ứng dụng, vì vậy khi xóa ứng dụng, dữ liệu trên bộ nhớ ngoài vẫn được giữ nguyên.

Shared preferences là một lớp cho phép lưu trữ dữ liệu theo dạng key-value với các kiểu dữ liệu nguyên thủy như integer, string, boolean, float, long Nếu bạn không cần lưu trữ nhiều dữ liệu và không yêu cầu cấu trúc phức tạp, Shared preferences là lựa chọn lý tưởng Các cặp key-value được ghi vào tệp XML trong thư mục ứng dụng và tồn tại trong suốt phiên bản làm việc của ứng dụng, đồng thời được chia sẻ giữa các thành phần như activity, service, và fragment Tuy nhiên, các giá trị trong Shared preferences không thể được truy xuất từ các ứng dụng khác.

17 khác Dữ liệu của ứng dụng được lưu trong mục /data/data/PACKAGE_NAME/shared_prefs/FILE_NAME

PACKAGE_NAME: Tên package của ứng dụng

FILE_NAME: Tên tập tin Shared preferences

For the application with the package name dev.example.shareprefs_demo, the Shared Preferences file named example.xml is stored at the following location: data/data/dev.example.shareprefs_demo/shared_prefs/example.xml.

Android hỗ trợ hoàn toàn cho cơ sở dữ liệu SQLite mà không cần thủ tục thiết lập phức tạp Chỉ cần xác định các lệnh SQL để tạo và cập nhật cơ sở dữ liệu, trong khi việc quản lý cơ sở dữ liệu được thực hiện tự động bởi nền tảng Android Tuy nhiên, việc truy cập vào cơ sở dữ liệu SQLite có thể làm chậm quá trình truy xuất dữ liệu do liên quan đến hệ thống tập tin, vì vậy nên thực hiện các hoạt động cơ sở dữ liệu không đồng bộ Nếu ứng dụng tạo ra một cơ sở dữ liệu, nó sẽ được lưu trữ mặc định trong thư mục /data/data/PACKAGE_NAME/databases/DATABASE_NAME.

- PACKAGE_NAME: là tên package của ứng dụng như com.example.sqlitedemo

- DATABASE_NAME: Là tên tập tin cơ sở dữ liệu SQLite

1.4.2 Sử dụng SQLite trong Android

Hệ điều hành Android hỗ trợ quản trị cơ sở dữ liệu quan hệ thông qua thư viện SQLite mà không có hạn chế nào Với SQLite, mỗi ứng dụng có thể tạo ra cơ sở dữ liệu quan hệ độc lập, giúp lưu trữ và quản lý cấu trúc dữ liệu phức tạp một cách hiệu quả.

Android được lưu trữ trong thư mục /data/data//databases trong thiết bị hoặc máy ảo

Gói android.database bao gồm tất cả các lớp cần thiết để làm việc với cơ sở dữ liệu, trong khi gói android.database.sqlite chứa các lớp cụ thể của Android SQLite API, cung cấp nhiều API khác nhau cho phép tạo, truy cập, sửa đổi và xóa cơ sở dữ liệu Dưới đây là một số thành phần quan trọng sẽ được giới thiệu.

Lớp SQLiteOpenHelper là lớp đầu tiên và quan trọng nhất của Android để làm việc với cơ sở dữ liệu SQLite, nó nằm trong package android.database.sqlite

SQLiteOpenHelper là lớp hỗ trợ thực hiện các tác vụ quan trọng trong việc tạo, mở và sử dụng cơ sở dữ liệu SQLite, đồng thời quản lý phiên bản của cơ sở dữ liệu Lớp này cung cấp phương thức khởi tạo cần thiết cho việc sử dụng hiệu quả.

SQLiteOpenHelper (Context context, String name,

SQLiteDatabase.CursorFactory factory, int version)

Context là một lớp trừu tượng trong hệ thống, chứa thông tin về môi trường ứng dụng Nó cung cấp các phương thức để tương tác với hệ điều hành, giúp người dùng dễ dàng truy cập và tương tác với các tài nguyên của hệ thống.

- String name là tên tệp cơ sở dữ liệu trong bộ nhớ Android

SQLiteDatabase.CursorFactory là lớp chịu trách nhiệm tạo ra các đối tượng con trỏ, hoạt động như bộ đầu ra cho mọi truy vấn liên quan đến SQLite trong Android.

- int version là tham số phiên bản

Khi khởi tạo một đối tượng của lớp này, ta phải ghi đè hai phương thức:

Phương thức onCreate() được gọi bởi framework khi cần truy cập cơ sở dữ liệu mà chưa được khởi tạo Để khởi tạo cơ sở dữ liệu, cần viết mã để tạo bảng, trong đó tên khóa chính phải được đặt là _id.

Kết luận chương

Chương này khám phá cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu trên thiết bị di động, đồng thời nhấn mạnh an toàn thông tin trong cơ sở dữ liệu Bài viết cũng cung cấp cái nhìn tổng quan về cơ sở dữ liệu SQLite và cơ chế hoạt động của nó trong Android Tiếp theo, chương 2 sẽ tập trung nghiên cứu phương pháp bảo mật cho cơ sở dữ liệu SQLite thông qua việc sử dụng SQLCipher.

GIẢI PHÁP BẢO MẬT CƠ SỞ DỮ LIỆU SQLITE SỬ DỤNG

Cơ chế bảo mật cho SQLite

2.2.1 Mức độ an ninh trong cơ sở dữ liệu

Có ba cách để truy cập vào một cơ sở dữ liệu SQLite:

- Viết chương trình mà gọi các hàm API để truy cập cơ sở dữ liệu

- Sử dụng các công cụ được cung cấp bởi SQLite như sqlite.exe hoặc công cụ khác để truy cập vào một cơ sở dữ liệu SQLite

Sử dụng các công cụ như GEDIT trên Linux hoặc Notepad trên Windows để chỉnh sửa trực tiếp các tập tin cơ sở dữ liệu.

Theo cấu trúc và ứng dụng của cơ sở dữ liệu, việc thực hiện các cơ chế bảo mật có thể đạt được ở hai cấp độ.

- Ở mức cơ sở dữ liệu, nghĩa là để tăng kiểm soát an ninh trong các mã của hệ thống quản lý cơ sở dữ liệu

Để tăng cường kiểm soát an ninh trong các ứng dụng sử dụng cơ sở dữ liệu, cần xem xét tất cả ba phương pháp tiếp cận của cơ sở dữ liệu Nếu chỉ áp dụng một phần phương pháp, các phương pháp khác sẽ không thể sử dụng dữ liệu chính xác, dẫn đến việc giảm hiệu quả trong việc bảo mật thông tin.

Hai mức độ thực hiện có những lợi thế và bất lợi riêng Việc thay đổi mã nguồn cơ sở dữ liệu là cần thiết cho các nhu cầu cũ, trong khi mã lớp ứng dụng cần được sửa đổi cho các yêu cầu mới Đối với SQLite, người dùng có thể thực hiện cả hai sơ đồ này, lựa chọn một trong hai phương pháp hoặc kết hợp chúng tùy theo nhu cầu cụ thể.

2.2.2 Cơ chế bảo mật cho SQLite

Bảo mật của SQLite có thể được tăng cường bằng nhiều cách, chẳng hạn như kiểm soát truy cập, mã hóa dữ liệu, kiểm toán, sao lưu phục hồi,…

Cơ sở dữ liệu SQLite là một tập tin bình thường, do đó việc truy cập vào nó phải tuân theo các cơ chế kiểm soát quyền truy cập tập tin Ngoài ra, xác thực có thể được tích hợp vào hệ quản trị cơ sở dữ liệu, yêu cầu người sử dụng hoặc ứng dụng cung cấp mật khẩu chính xác để truy cập Chỉ sau khi xác thực thành công, người dùng mới có thể truy cập vào cơ sở dữ liệu.

Có hai phương pháp mã hóa dữ liệu cho SQLite: thứ nhất là mã hóa ở mức hệ quản trị cơ sở dữ liệu, thực hiện mã hóa hoặc giải mã khi đọc từ hoặc ghi vào cơ sở dữ liệu; thứ hai là mã hóa ở lớp ứng dụng, nơi mã hóa hoặc giải mã được áp dụng cho một số trường cụ thể trong các bản ghi.

So với phương pháp thứ hai, phương pháp đầu tiên cung cấp mã hóa mạnh mẽ hơn nhờ vào việc nhúng các chức năng mã hóa vào hệ quản trị cơ sở dữ liệu, cho phép mã hóa và giải mã diễn ra một cách liền mạch với người sử dụng Tuy nhiên, điều này làm tăng tải cho hệ quản trị cơ sở dữ liệu và yêu cầu sửa đổi mã nguồn của nó Ngược lại, các phương pháp sau cần chương trình ứng dụng để mã hóa dữ liệu trước khi ghi vào cơ sở dữ liệu và giải mã sau khi đọc, dẫn đến việc tăng tải cho các chương trình ứng dụng.

Mã nguồn của SQLite bao gồm các giao diện mã hóa như sqlite3_key và sqlite3_rekey, cho phép cung cấp mã hóa cho hệ quản trị cơ sở dữ liệu Mặc dù đã có một số triển khai mã hóa trên SQLite, chúng đều dựa trên các phiên bản cũ, trong khi SQLite đang phát triển nhanh chóng Sự thay đổi về chức năng và cấu trúc dữ liệu đã tạo ra những khiếm khuyết và cần cải thiện để thực hiện các chức năng tốt hơn.

Cơ chế kiểm toán của SQLite có thể được thực hiện thông qua các phương thức khai thác do hệ điều hành cung cấp Chẳng hạn, trên hệ thống Linux, có thể sử dụng hệ thống gọi syslog để ghi lại các hoạt động quan trọng.

Giải pháp bảo mật cơ sở dữ liệu SQLite sử dụng SQLCipher

Hệ quản trị cơ sở dữ liệu có thể được triển khai trong lớp ứng dụng, với chức năng giao diện lập trình ứng dụng (API) cho phép đăng nhập vào các hoạt động quan trọng Để thực hiện điều này, cần sửa đổi mã nguồn của SQLite và kích hoạt tùy chọn đa luồng đồng thời.

2.2.2.4 Sao lưu và phục hồi

SQLite sử dụng một tập tin duy nhất để lưu trữ toàn bộ nội dung của cơ sở dữ liệu, giúp việc sao lưu và phục hồi trở nên dễ dàng chỉ bằng cách sao chép tập tin đó.

Xác thực, mã hóa và cơ chế kiểm toán được thực hiện thông qua việc thay đổi mã nguồn của SQLite trong hệ quản trị cơ sở dữ liệu Sự kết hợp giữa xác thực và mã hóa tạo thành một cơ chế mã hóa thống nhất, bảo vệ không chỉ dữ liệu mà còn cả cấu trúc cơ sở dữ liệu Mật khẩu cần được cung cấp trước khi truy cập vào cơ sở dữ liệu; nếu mật khẩu sai, cấu trúc cơ sở dữ liệu có thể bị hiểu sai và không cho phép truy cập theo dõi Đối với việc sao lưu và khôi phục, API được định nghĩa để thực hiện sao lưu và khôi phục cho một cơ sở dữ liệu cụ thể.

2.3 Giải pháp bảo mật cơ sở dữ liệu SQLite sử dụng SQLCipher

SQLCipher là một thư viện mã nguồn mở cung cấp giải pháp mã hóa AES

256 bit trong suốt, an toàn cho các tệp cơ sở dữ liệu SQLite

Hình 2.2 Dữ liệu trong cơ sở dữ liệu SQLite trước và sau mã hoá

SQLCipher đã trở thành một trong những nền tảng cơ sở dữ liệu mã hóa phổ biến nhất, được áp dụng rộng rãi trong các sản phẩm thương mại và nguồn mở như một giải pháp an toàn cho cơ sở dữ liệu Điều này làm cho SQLCipher trở thành lựa chọn hàng đầu cho các ứng dụng di động, hệ thống nhúng và máy tính để bàn.

Hình 2.3 Một số tổ chức đang sử dụng SQLCipher

SQLCipher, phát triển bởi Zetetic LLC và ra mắt lần đầu vào tháng 11 năm 2008, ban đầu chỉ là công cụ bảo mật cho trình quản lý mật khẩu Tuy nhiên, nhờ chi phí hoạt động thấp và kích thước nhỏ gọn, nó đã nhanh chóng trở nên phổ biến trong cộng đồng phát triển ứng dụng trên iOS và Android, trở thành giải pháp bảo mật cơ sở dữ liệu được ưa chuộng.

29 nhất cho nền tảng SQLCipher được sử dụng trên Iphone iOS 2 trở lên Vào năm

Năm 2011, khi thị trường Android đang phát triển mạnh mẽ, Zetetic đã cho ra mắt SQLCipher cho Android SQLCipher cũng đã được triển khai thành công trên nhiều nền tảng khác như Windows C/C++, NET, Ruby, Java, PHP, Python, Mac OS X và Linux.

SQLCipher là một giải pháp bảo mật nhỏ gọn nhưng hiệu suất cao, lý tưởng cho việc bảo vệ cơ sở dữ liệu trên các hệ thống nhúng và thiết bị di động.

- Hiệu suất cao mà tiêu tốn ít tài nguyên cho việc mã hóa (5~15%)

- 100% cơ sở dữ liệu đều sẽ được mã hóa

- Sử dụng chế độ bảo mật cao (Chế độ CBC, dẫn xuất khóa)

- Các thuật toán được cung cấp bởi thư viện mật mã OpenSSL

SQLCipher là một tiện ích bảo mật mở rộng cho SQLite, cho phép tạo cơ sở dữ liệu mã hóa Nó sử dụng API SQLiteCipher để chèn lệnh gọi vào hệ thống, hoạt động trên các trang cơ sở dữ liệu trước khi đọc và ghi từ bộ nhớ.

Ứng dụng này không yêu cầu kiến thức chuyên sâu về bảo mật cơ sở dữ liệu, vì nó sử dụng API SQLite tiêu chuẩn để thao tác với các bảng qua ngôn ngữ SQL SQLCipher hoạt động âm thầm, mã hóa và quản lý an ninh cho cơ sở dữ liệu.

SQLCipher hoạt động bằng cách mã hóa và giải mã dữ liệu theo từng đoạn khi cần, do đó nó không xử lý toàn bộ cơ sở dữ liệu cùng một lúc.

+ Khởi động và tắt nhanh chóng

+ Thực hiện rất tốt ngay cả với cơ sở dữ liệu lớn

Hoạt động với lập chỉ mục SQLite, tức là truy xuất một bản ghi thông qua tìm kiếm được lập chỉ mục, có thể chịu ít nhất 5% chi phí trên cơ sở dữ liệu SQLite tiêu chuẩn.

- Sử dụng thuật toán mã hóa AES-256 ở chế độ CBC

Mỗi trang trong cơ sở dữ liệu được mã hóa và giải mã độc lập, với kích thước mặc định là 4096 byte, có thể điều chỉnh trong thời gian chạy để tối ưu hóa hiệu suất cho các loại truy vấn cụ thể.

Mỗi trang dữ liệu được khởi tạo với một vector ngẫu nhiên (IV) được tạo ra bởi các trình tạo số ngẫu nhiên an toàn như Open SSL, RAND_bytes, SecRandom của CommonCrypt, và LibTomCrypt Fortuna IV này được lưu trữ ở cuối trang và được tái tạo để đảm bảo rằng không có IV nào được sử dụng lại cho các lần ghi tiếp theo trên cùng một trang.

Mỗi trang trong cơ sở dữ liệu chứa Mã xác thực thông báo (HMAC-SHA512) của bản mã và vector khởi tạo (IV) ở cuối Việc kiểm tra MAC diễn ra khi trang được đọc lại từ bộ nhớ Nếu bản mã hoặc IV bị giả mạo hoặc hỏng, HMAC sẽ kích hoạt SQLCipher báo cáo sự cố với cơ sở dữ liệu.

Khi khởi tạo với mật khẩu SQLCipher, dữ liệu khóa được lấy bằng PBKDF2-HMAC-SHA512 Mỗi cơ sở dữ liệu có một salt ngẫu nhiên duy nhất trong 16 bytes đầu tiên của tệp, được sử dụng để dẫn xuất khóa, đảm bảo rằng ngay cả khi hai cơ sở dữ liệu có cùng mật khẩu, khóa mã hóa cũng sẽ khác nhau Cấu hình mặc định sử dụng 256.000 lần lặp cho quá trình dẫn xuất khóa, có thể điều chỉnh thông qua PRAGMA kdf_iter.

- Khóa được sử dụng để tính toán các trang HMAC khác với khóa mã hóa

Nó được lấy từ khóa mã hóa và sử dụng PBKDF2 với 2 lần lặp và một biến thể của salt cơ sở dữ liệu ngẫu nhiên

XÂY DỰNG ỨNG DỤNG CÓ BẢO MẬT TRÊN HỆ ĐIỀU HÀNH ANDROID

Ngày đăng: 24/06/2023, 15:33

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[3] Sunny Kumar Aditya, Vikash Kumar Karn, Android SQLite Enssentials [4] Hezal Lopes, Rahul Lopes, Comparative Analysis of Mobile SecurityThreats And Solution, International Journal of Engineering Research and Applications Record 3, 2013 Sách, tạp chí
Tiêu đề: Android SQLite Enssentials
Tác giả: Sunny Kumar Aditya, Vikash Kumar Karn
[5] Rachmawan Ardiansa, Developing secure Android application with encryted database file using SQLCipher, UteM, 2014 Sách, tạp chí
Tiêu đề: Developing secure Android application with encryted database file using SQLCipher
Tác giả: Rachmawan Ardiansa
Nhà XB: UteM
Năm: 2014
[6] ThS. Nghiêm Thị Hương, Hệ quản trị cơ sở dữ liệu SQLite trên thiết bị di động và ứng dụng, Trường Đại học Công nghệ - Đại học Quốc gia Hà Nội, 2014 Sách, tạp chí
Tiêu đề: Hệ quản trị cơ sở dữ liệu SQLite trên thiết bị di động và ứng dụng
Tác giả: ThS. Nghiêm Thị Hương
Nhà XB: Trường Đại học Công nghệ - Đại học Quốc gia Hà Nội
Năm: 2014
[7] TS. Hoàng Xuân Dậu, Bài giảng an toàn ứng dụng Web và Cơ sở dữ liệu, Học viện Công nghệ và Bưu chính viễn thông, 2017 Sách, tạp chí
Tiêu đề: Bài giảng an toàn ứng dụng Web và Cơ sở dữ liệu
Tác giả: TS. Hoàng Xuân Dậu
Nhà XB: Học viện Công nghệ và Bưu chính viễn thông
Năm: 2017
[8] ThS. Nguyễn Duy Thanh, Cách sử dụng SQLite trong Andoid https://duythanhcse.wordpress.com/2013/06/12/bai-tap-31-cach-su-dung-sqlite-trong-android/, 20 Sách, tạp chí
Tiêu đề: Cách sử dụng SQLite trong Andoid
Tác giả: ThS. Nguyễn Duy Thanh
Năm: 2013

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w