1 of 36

캡스톤디자인 2조 중간 발표 2

강세민 박지인 온수옥 정서윤

IAmHere

CapstoneDesign

2 of 36

목차

목차 소개

  1. 트러블슈팅
  2. 출석 시스템 수정
  3. 지문 데이터 암호화
  4. 알림 시스템 서버
  5. 제공하는 서비스 및 향후계획

IAmHere

CapstoneDesign

3 of 36

트러블슈팅

1

4 of 36

라즈베리파이 관련 이슈들

  1. 트러블슈팅
  • 문제 1. SD카드가 없어서 OS를 설치하지 못함?
    • 라즈베리파이4부터는 USB 부팅이 가능해져서 USB에 OS를 다운로드하고 부팅함

  • 문제 2. 꼭 모니터와 키보드를 직접 연결해야 하나?
    • 다른 컴퓨터와 SSH 통신을 사용하여 직접 연결하지 않아도 작동 가능

  • 문제 3. 파이썬 패키지를 깔려는데 error: externally-managed-environment 에러가 떠요
    • .venv 가상환경을 만들거나 --break-system-package 옵션을 사용해 설치

IAmHere

CapstoneDesign

5 of 36

지문인식 관련 이슈들

  1. 트러블슈팅
  • 문제 1. 왜 센서 초기화가 안 되지?
    • 라즈베리파이에 센서를 연결할 때, PIN을 알맞게 연결해야 함. 사용설명서를 보면서 해결
    • 라즈베리파이4부터 시리얼 통신에 필요한 포트가 변경됨. 따라서 /dev/serial/ttyS0에서 /dev/serial/ttyAMA0로 변경

  • 문제 2. 왜 Adafruit_CircuitPython_Fingerprint 라이브러리가 작동하지 않지?
    • 현재 구비 중인 센서는 아두이노 전용. 위의 라이브러리와 상관없음.
    • 따라서 아두이노 센서와 호환되는 다른 라이브러리를 찾아 해결(정말 감사하다)

IAmHere

CapstoneDesign

6 of 36

블루투스 관련 이슈들

  1. 트러블슈팅
  • 문제 1. 블루투스와 지문인식이 왜 동시에 안 되지?
    • /dev/serial/ttyAMA0를 시리얼 통신에 사용. 이는 사실 블루투스 포트였음
    • 둘 다 사용하기 위해 miniUART 방식을 채용 (지문 - ttyAMA0, 블루투스 - ttyS0)
    • /boot/firmware/config.txt에서 다음과 같이 변경

enable_uart=1

dtoverlay=pi3-miniuart-bt

ttyS0와 ttyAMA0가 모두 사용 중

IAmHere

CapstoneDesign

7 of 36

블루투스 관련 이슈들

  1. 트러블슈팅
  • 문제 2. 왜 기기와 연결이 안 될까?
  • 기기 스캔: scan on으로 해당 기기를 스캔
  • 기기 페어링: pair를 한 뒤, 페어링할 기기에서 인증코드를 확인. 라즈베리파이에 띄워진 인증코드와 같다면 yes를 입력하여 페어링
  • 기기 연결: connect를 하여 기기와 연결
    1. 기기 신뢰를 하면 기기에서 라즈베리파이로 연결이 될 수도 있음

IAmHere

CapstoneDesign

8 of 36

출석 시스템 수정

2

9 of 36

수정된 시스템 소개

2. 출석 시스템 수정

기존 시스템

비교

수정된 시스템

없음

강의자 블루투스 연결

강의자의 핸드폰에 블루투스 연결하면 강의 시작

1차 출석 시에 사용

블루투스 출석

강의가 시작하면 10분마다 확인

2차 출석 시에 무작위의 학생을 선별해 사용

지문 출석

강의가 종료되면 블루투스 출석이 안 된 학생들을 골라서 지문 인식 진행

IAmHere

CapstoneDesign

10 of 36

블루투스 페어링

2. 출석 시스템 수정

  • 블루투스 연결은 페어링 하는 과정이 필요(보안 문제)
  • 페어링은 ‘yes’를 입력하는 대화형 인터페이스 방식이라 스캔에 비해 복잡
  • 따라서 대화식으로 처리하기 위해 기존에 쓰던 subprocess 말고, pexpect를 사용

expect(string): 출력에 해당 문자열이 뜰 때까지 대기

expect에 문자열 리스트를 넘겼을 경우, 매칭된 인덱스를 반환

(여기선 문자열을 하나만 넘겼기에 정상적인 경우 0을 반환)

IAmHere

CapstoneDesign

11 of 36

수정된 시스템 영상

2. 출석 시스템 수정

IAmHere

CapstoneDesign

12 of 36

지문 데이터 암호화

3

13 of 36

암호화 개요

목차 3

  • 기존 지문 데이터의 보안을 고려하여 지문 암호화를 실행
  • 지문 등록 시 지문 특징점 데이터를 암호화하여 저장
  • 특징점 데이터 (x) => 암호화된 데이터만 저장
  • 비교 : 암호화한 데이터를 복호화하여 해당 강의의 2차 출석 대상의 지문과 비교

CBC MODE의 암호화/복호화 과정

IAmHere

CapstoneDesign

14 of 36

aes128

목차 3

대칭키 블록 암호화 알고리즘

  • 고정 길이(128)의 데이터와 대칭키를 이용하여 암호화/복호화한다.
  • 이전 블록에 의존하여 블록을 xor연산 후 결합
  • CBC모드와 라운드 횟수로 속도와 보안성 보장

IAmHere

CapstoneDesign

15 of 36

aes128

목차 3

간단한 암호화 과정

  • 데이터 => 128 bit의 배수로 맞추기 위해 padding 추가.
  • 데이터를 128 bit 단위로 쪼개고 암호화 진행.
  • iv: 초기화 벡터 를 이용하여 데이터와 xor연산.

IAmHere

CapstoneDesign

16 of 36

aes128

목차 3

간단한 암호화 과정

  • subBytes -> shiftRows -> MixColumns -> AddRoundkey

subBytes 표

IAmHere

CapstoneDesign

17 of 36

aes128

목차 3

간단한 암호화 과정

  • subBytes -> shiftRows -> MixColumns -> AddRoundkey

MixColumns-행렬곱

이전 행렬과 xor연산

IAmHere

CapstoneDesign

18 of 36

encryption.py

목차 3

init, encrypt,decrypt 함수

  • init(self,key:bits)

128 고정 비트 길이의 키를 전달

  • encrypt()

무작위 iv를 생성

->패딩 추가

->CBC모드로 암호화를 진행�->IV와 암호문을 함께

Base64로 인코딩하여 반환

class Encryption:

def __init__(self, key: bits):

self.key = key

def encrypt(self, data: str) -> str:

try:

iv = os.urandom(AES.block_size)

cipher = AES.new(self.key, AES.MODE_CBC, iv)

padded_data = pad(data.encode(), AES.block_size)

ct_bytes = cipher.encrypt(padded_data)

return base64.b64encode(iv + ct_bytes)

decode('utf-8')

except (ValueError, KeyError) as e:

print(f"Encryption error: {e}")

return None

IAmHere

CapstoneDesign

19 of 36

encryption.py

목차 3

init, encrypt,decrypt 함수

class Encryption:

def __init__(self, key: bits):

self.key = key

def encrypt(self, data: str) -> str:

try:

iv = os.urandom(AES.block_size)

cipher = AES.new(self.key, AES.MODE_CBC, iv)

padded_data = pad(data.encode(), AES.block_size)

ct_bytes = cipher.encrypt(padded_data)

return base64.b64encode(iv + ct_bytes)

decode('utf-8')

except (ValueError, KeyError) as e:

print(f"Encryption error: {e}")

return None

CBC

  • 암호화 알고리즘 모드 중 하나
  • 전 블록과 XOR연산을 통해 이전 암호문과 연산
  • 첫번째 암호문은 IV(Initial Vector)가 암호문 대신 사용된다
  • IV + data => result
  • result와

IAmHere

CapstoneDesign

20 of 36

encryption.py

목차 3

-decrypt()함수

복호화 시 저장된 IV를 분리해서 사용�CBC 모드로 다시 원본 데이터 복원

def decrypt(self, encrypted: str) -> str:

try:

encrypted_data = base64.b64decode(encrypted.encode())

iv = encrypted_data[:AES.block_size]

ciphertext = encrypted_data[AES.block_size:]

cipher = AES.new(self.key, AES.MODE_CBC, iv)

decrypted_data = unpad(cipher.decrypt(ciphertext), AES.block_size)

return decrypted_data.decode()

except (ValueError, KeyError) as e:

print(f"Decryption error: {e}")

return None

IAmHere

CapstoneDesign

21 of 36

암호화/복호화 적용

목차 3

-fingerprint.py

encrypt()함수로 등록 / decrypt()로 비교

fingerprint_json = json.dumps(fingerprint_data)

encrypted_data = encrypt(fingerprint_json)

encrypted_template = result['fingerprint_template']

decrypted_json = decrypt(encrypted_template)

stored_fingerprint = json.loads(decrypted_json)

IAmHere

CapstoneDesign

22 of 36

알림 시스템 서버

4

23 of 36

서비스 개요 소개

4. 알림 시스템 서버

  • 목표: 언제 어디서나 실시간 출석 확인과 알림이 가능한 출결 시스템 구축

  • 구성 요소: 블루투스 스캔 -> DB 기록-> DB 기반 출결 알람 자동 전송

  • 아키텍처 소개
    • Frontend: 안드로이드 스튜디오
    • Backend: FastAPI + MySQL

IAmHere

CapstoneDesign

24 of 36

아키텍처 흐름

4. 알림 시스템 서버

[학생 스마트폰] ←→ [라즈베리파이: 블루투스 스캔]

[라즈베리파이] → 출석 API 호출 (FastAPI)

[출결 DB(MySQL)] ← 출석 기록 저장

[알림 모듈] → FCM으로 출석 알림 전송

IAmHere

CapstoneDesign

25 of 36

4. 알림 시스템 서버

  • 서버 백엔드 서비스 구축
  • 깃허브 연동

IAmHere

CapstoneDesign

26 of 36

DB연동

4. 알림 시스템 서버

DB_CONFIG = {

"host": "34.22.92.10",

"user": "teamuser",

"password": "******",

"database": "iamhere",

"charset": "utf8mb4"

}

IAmHere

CapstoneDesign

27 of 36

향후 계획

4. 알림 시스템 서버

  • Android ↔ FastAPI 서버 연동
  • FCM 연동을 통한 푸시 알림 기능 배포
  • 모니터링 및 로깅 도입

완료한 항목

  • 백엔드 서버 로직 구현 FastAPI
  • MySQL 기반 데이터베이스 설계
  • GCP서버 생성
  • 백엔드 서버 GCP 배포
  • 외부 DB연동 성공

IAmHere

CapstoneDesign

28 of 36

제공하는 서비스 및 향후계획

5

29 of 36

IAmHere로 제공하는 서비스

5. 제공하는 서비스

IAmHere?

학생들이 스마트폰에

설치해 블루투스와

지문인식을 통해 출석을

체크하는 Android 앱

현재 Figma를 통해

화면기획 및 UI/UX 설계 중

+ Android Studio로

개발 진행 중

IAmHere

CapstoneDesign

30 of 36

IAmHere로 제공하는 서비스

5. 제공하는 서비스

실시간 출석 현황 확인 기능

👆 학생들이 현재 듣고있는 강의에 대해

출석 현황을 한눈에 파악 가능

💬 현재 듣고있는 강의 표시

💬 (출석 완료 / 지각 / 결석) 3가지 분류

IAmHere

CapstoneDesign

31 of 36

IAmHere로 제공하는 서비스

5. 제공하는 서비스

월별 / 주별 출석 통계 기능

👆 월별로 출석 통계를 알 수 있음

💬 (출석 완료 / 지각 / 결석) 을

원형그래프로 표현, 직관적으로 알

수 있는 색상 사용

💬 학생 스스로 관리 가능

IAmHere

CapstoneDesign

32 of 36

IAmHere로 제공하는 서비스

5. 제공하는 서비스

출석 알림 기능

👆 수업 시작 전, 출석 완료 후 알림을

보내서 출석 여부를 바로 확인 가능

💬 수업 시작 전에 곧 어떤 과목을

들어야 하는지 알림을 보내서

지각하거나 결석하지 않도록 도움

IAmHere

CapstoneDesign

33 of 36

IAmHere로 제공하는 서비스

5. 제공하는 서비스

관리자 페이지

👆 관리자 페이지에서 교수님들이

학생들의 출석현황을 파악 가능

✌ 수동으로 학생 출석 상태를 변경 가능

IAmHere

CapstoneDesign

34 of 36

IAmHere

CapstoneDesign

35 of 36

IAmHere의 향후 계획

향후 계획

현재

지문 데이터 암호화

알림 시스템 서버 수정

Figma를 통한 화면 구성 완료

Android Studio를 깃허브와 연동해 개발 중

IAmHere

CapstoneDesign

36 of 36

감사합니다.