본문 바로가기

디지털포렌식(Digital forensic)/키(key)

스마트폰 패턴 [랜덤 암호화] 코드

반응형

https://delock.tistory.com/115

 

스마트폰 패턴 암호화 규칙

스마트폰의 패턴 암호화는 사용자가 설정한 패턴을 이용해 장치를 잠금 해제하는 보안 방법이다. 패턴 암호화는  3x3 그리드에서 최소 4개의 점을 연결하여 하나의 패턴을 생성하는 방식이다.스

delock.tistory.com

 

 

 

위 링크를 통해 스마트폰 패턴 암호화에 사용된 규칙을 정하고
3×3 그리드에서 최소 4개의 점을 연결하여 패턴을 만들고
패턴을 숫자로 표현한 후 스트링(문자열)으로 만든다.

완성된 스트링은 SHA256 알고리즘을 이용해 해시값으로 만든다.

 

 

import random
import hashlib

# 3x3 그리드의 각 점을 번호로 매핑
grid_points = [(0, 0), (0, 1), (0, 2),
               (1, 0), (1, 1), (1, 2),
               (2, 0), (2, 1), (2, 2)]

# 점을 랜덤하게 연결하여 패턴을 생성하는 함수
def generate_pattern(min_length=4, grid_size=3):
    def is_valid_move(current, next_point, pattern):
        if next_point in pattern:
            return False
        # Check if there's a point between current and next_point
        if (abs(current[0] - next_point[0]) == 2 and current[1] == next_point[1]) or (abs(current[1] - next_point[1]) == 2 and current[0] == next_point[0]):
            mid_point = ((current[0] + next_point[0]) // 2, (current[1] + next_point[1]) // 2)
            if mid_point not in pattern:
                return False
        return True

    pattern = []
    current_point = random.choice(grid_points)
    pattern.append(current_point)
    
    while len(pattern) < min_length or (len(pattern) < grid_size**2 and random.random() > 0.3):
        next_point = random.choice(grid_points)
        if is_valid_move(current_point, next_point, pattern):
            pattern.append(next_point)
            current_point = next_point

    return pattern

# 패턴을 문자열로 변환하는 함수
def pattern_to_string(pattern):
    return ''.join(f'{x},{y}' for x, y in pattern)

# 문자열을 해시 값으로 변환하는 함수
def hash_pattern(pattern_str):
    return hashlib.sha256(pattern_str.encode()).hexdigest()

# 랜덤 패턴 생성
pattern = generate_pattern()
pattern_str = pattern_to_string(pattern)
pattern_hash = hash_pattern(pattern_str)

print(f"Generated pattern: {pattern}")
print(f"Pattern string: {pattern_str}")
print(f"Pattern hash: {pattern_hash}")

 

 

랜덤실행결과(1)
Pattern string: 1,02,00,10,0
Pattern hash: e81a28aa71c599a0a93e51a3af606763ee391485968f29bb3114cf45d0303bab

랜덤실행결과(2)

Generated pattern: [(0, 1), (1, 0), (2, 2), (0, 0), (1, 2), (2, 0)]
Pattern string: 0,11,02,20,01,22,0
Pattern hash: f060055458c921da2b636eaa4e1c35ed5cba4e228ad8e1783d045fe977616050

 

랜덤실행결과(3)

Generated pattern: [(2, 2), (2, 1), (1, 0), (1, 1)]
Pattern string: 2,22,11,01,1
Pattern hash: 3b94079a69469f67b3710cc61b7693405aaf7a38216823c9cd04b389bea8acc2

728x90