นำรูปมาจาก http://www.adomonline.com/images/news/7193various-sim-cards.jpg

นำรูปมาจาก http://www.adomonline.com/images/news/7193various-sim-cards.jpg

วันนี้ได้ลองเขียนโปรแกรมสำหรับอ่านข้อมูลจาก SIM card
พบว่ามันมีโครงสร้างและขั้นตอนการอ่านที่น่าสนใจมาก
เมื่อศึกษาไปถึงรายละเอียดของ SIM card ก็ได้ความรู้เยอะมาก
จึงทำการศึกษาจากเอกสารต่างๆ ซึ่งระบุไว้ในส่วน Reference แล้ว
ซึ่งสามารถสรุปขั้นตอนการศึกษาได้ดังนี้

เริ่มด้วย SIM ย่อมาจาก Subscriber Identity Module
โดยเก็บข้อมูลไว้ใน smartcard
ซึ่งเก็บข้อมูลต่างๆ สำหรับที่จำเป็นต่อระบบโทรศัพท์ไร้สาย
ตัวอย่างเช่น ข้อมูลระบุตัวตนของผู้ใช้งาน
การอนุญาติของเครือข่าย
security key ส่วนตัวของผู้ใช้งาน
รายชื่อเบอร์โทรศัพท์
ข้อมูลข้อความต่างๆ

ดังนั้น SIMCARD จึงหมายถึง
Smart card ที่มี SIM application นั่นเอง

ส่วน function การทำงานต่างๆ ใน SIM Card นั้น ประกอบไปด้วย 4 ส่วนหลัก คือ
1. Identification การระบุตัวตน 
โดยระบุด้วย IMSI ซึ่งค่านี้จะถูกจับคู่กับเบอร์มือถือ เพื่อทำการ provisioning ต่อไป

2. Authentication การพิสูจน์ตัวตน 
เป็นกระบวนการพิสจน์หรือตรวจสอบด้วย algorithm ต่างๆ
เช่น COMP128V3 สำหรับ 2/2.5G GSM
CAVE สำหรับ CDMA
Milenage สำหรับ 3G
โดยแต่ละIMSI จะมีผลลัพธ์การทำงานที่แตกต่างกันและไม่ซ้ำกันเลย
ทำให้สามารถพิสูจน์ได้ว่าแต่ละ SIM Card ใช้เครือข่ายอะไร
เพื่อตรวจสอบว่าสามารถใช้งานได้หรือไม่

3. Storage ที่จัดเก็บข้อมูล
ทำการเก็บข้อมูลเบอร์โทรศัพท์ และ ข้อความ SMS ต่างๆ

4. Application
มาตรฐาน SIM Tool Kit หรือ GSM 11.14
อนุญาติให้สามารถสร้าง application บน SIM
สำหรับข้อมูลพื้นฐานต่างๆ ตามต้องการ
และ application อื่นๆ เช่น m-commerce การ chat
การ backup ข้อมูลเบอร์โทร
พวก location base และอื่นๆ อีกมากมาย

รูปแสดง function การทำงานทั้ง 4 ของ SIM ในระบบ GSM

Screen Shot 2557-04-23 at 9.22.17 PM

ส่วนขั้นตอนการอ่านข้อมูลจาก SIM Card ที่ทำงานเป็นดังรูป

Screen Shot 2557-04-23 at 9.23.41 PM

โดยส่วนที่เน้นก็คือขั้นตอนการดังข้อมูลในส่วน Identification
ซึ่งก็คือค่าของ IMSI นั่นเอง
เมื่อศึกษาการอ่านข้อมูลแล้วต้องส่งข้อมูลรับส่งในรูปแบบของ APDU
ผมทำการอธิบายไว้ใน Blog เรื่อง APDU

รูปการรับส่งข้อมูลด้วย APDU

Screen Shot 2557-04-23 at 9.29.36 PM

ปัญหาที่ต้องจัดการก็คือ จะส่งคำสั่ง APDU ไปอย่างไรบ้าง ?
สิ่งแรกที่ต้องเรียนรู้ก่อนก็คือ โครงสร้างไฟล์ของ Smart card
โดยอ้างอิงจากมาตรฐาน ISO 7816-4
นั้นประกอบไปด้วยไฟล์ 3 ชนิด คือ

  • MF = Master File หรือ root directory
  • DF = Dedicated File หรือ directory
  • EF = Elementary File หรือ ไฟล์ข้อมูล นั่นเอง

ซึ่ง MF นั่นคือส่วนการทำงานหลักที่ต้องมี เพราะว่าคุณต้องไปยัง root directory ก่อนเสมอ
ส่วน DF และ EF นั่นคือส่วนเสริมจะใช้หรือไม่ก็ได้

สามารถอธิบายด้วยรูปดังนี้

Screen Shot 2557-04-23 at 9.36.01 PM

แล้วจะเข้าถึงโครงสร้างไฟล์นี้อย่างไรล่ะ ??
เมื่อไปศึกษาในรายละเอียดพบว่า

ในขั้นตอนแรก
จะต้องเข้าถึงส่วน MF หรือ root directory ก่อน ด้วย File IDentifier (FID) = 0x3F00 เสมอ

ปัญหาที่ได้รับมาก็คือ เราจะดึงค่า IMSI มาได้อย่างไร ??
โดยตรงนี้จึงต้องไปศึกษาโครงสร้างระบบไฟล์มาตรฐานของ SIM card
ซึ่งพบข้อมูลดังรูป

Screen Shot 2557-04-23 at 9.40.26 PM

ทำให้เห็นได้ว่าในขั้นตอนที่ 2
ถ้าจะเข้าถึง IMSI นั้นต้องเข้าถึง directory ย่อย หรือ DF
ด้วย FID = 0x7F20

แล้วในขั้นตอนที่ 3
ทำการอ่านข้อมูลจากไฟล์ที่เก็บค่า IMSI หรือ EF
ด้วย FID = 0x6F07

เพียงเท่านี้ ผมก็สามารถอ่านข้อมูล IMSI จาก SIM Card ได้แล้ว …. สนุกจริงๆ นะเออ

Reference Websites
http://www.mpf.org.in/
http://www-phare.lip6.fr/~langar/RTEL_courses/SmartSIM.pdf