2009-10-23 4 views
13

iPhone에서 암호화 된 파일을 가지고 있고 암호를 해독 할 때마다 키보드를 사용하지 않고 암호 해독 기호를 "그리기"를 원합니다.그려진 획을 사용하여 데이터의 암호를 해독하는 알고리즘

사용자가 파일을 필요할 때마다 암호 해독하도록 요청하면 (예 : 응용 프로그램을 실행할 때마다) 파일에 20 자 정도의 암호를 입력하는 것이 좋습니다 키보드를 사용하면 20 문자 암호로도 보안을 얻을 수 있습니다 (모양/기호가 얼마나 복잡한지에 따라 다름).

그릴 기호는 대부분 한 획일 수 있지만 (예 : 손가락을 들었을 때 끝났을 때) 매우 복잡 할 수 있으므로 다른 사람이 반복해서 그리는 것을 어렵게합니다. 그것은 모든 사람의 서명이 어떻게 독특하고 복제하기 어려운지와 같은 것입니다. 실제로 이것은 중복되는 것을 막아야 만한다면 너무 복잡 할 수 있습니다. 따라서 지금은 무시할 수 있으며 기호가 다른 사람에게 보이지 않으므로 반복 할 수 있는지 여부는 중요하지 않습니다. 그들에 의해 또는 아닙니다.

실제 문제는 동일한 (합리적으로) 획을 동일한 키 (예 : 해시 값)로 일관되게 변환하는 것입니다. 사용자가 스트로크를 정확히 100 % 반복 할 것으로 예상 할 수 없기 때문에 분명히 알고리즘에서 용서의 한계점이 있어야합니다.

암호 해독 방법으로 기호를 사용하면이 문제에 대한 다른 차원이 완전히 추가됩니다. 생성 된 해시 값을 암호화되지 않은 형식으로 저장할 필요가 없으므로 다른 사람이 하드 드라이브의 해당 부분에 액세스하여 전체 그림 프로세스를 거치지 않고 수동으로 해독 키없이 해독 키를 얻을 수 있습니다. 또한 모양을 그리는 방법에 대해 아무 것도 저장하지 않으려는 경우가 많습니다.

사용자가 해독 기호로 사용할 수있는 획의 좋은 예는 "&"기호입니다. 파일을 해독해야 할 때마다 사용자가 iPhone에서이 기호를 그리는 것을 상상해보십시오. 기호의 크기는 그릴 때마다 동일하지 않을 수 있습니다. 또한 기호의 회전은 사용자가 장치를 가지고있는 방식에 따라 다를 수 있습니다. 이상적으로, 두 경우 모두 사용자의 획에 상대적으로 심볼이 그려지기 때문에 같은 해시 값을 생성하여 파일을 해독 할 수 있어야합니다.

모양이나 문자 인식 같은 것이 비슷한 알고리즘이라고 생각했습니다. 사용자가 (합리적으로 모양을 나타내는) 무언가를 그린 다음 그릴 때마다 동일한 해시 값을 갖는 올바른 모양으로 수정합니다. 그러나 이런 식으로 그릴 수있는 모양의 데이터베이스가 필요할 것이고 알파벳의 모든 문자와 같은 것을 선택하면 26 자만 얻을 수 있습니다. 그리고 사용자가 파일의 암호를 해독하기 위해 하나의 기호 만 그릴 필요가 있다고 가정하면 26 개의 가능성으로 매우 안전하지 않은 암호가 생깁니다.

내가 생각한 또 다른 한 가지는 작은 세그먼트로 그려진 심볼을 분해하고 그 심볼 인식을 실행할 수 있다는 것입니다. 그래서 데이터베이스에 4 개의 심볼이 있다고 상상해보십시오 : 수직선, 수평선, 양방향의 대각선. 이제 사용자가 그릴 때 각 세그먼트는 이들 중 하나로 인식 된 다음 모두 결합되어 일부 해시 값을 형성합니다. 따라서 사용자가 암호 해독 기호로 소문자 "r"을 선택했다고 상상해보십시오. 따라서 수직선을 아래로 그리고 수직선을 따라 대각선을 그리고 오른쪽으로 그리는 것으로 시작합니다. 이 방법의 한 가지 문제점은 스트로크를 개별 세그먼트로 분할 할 때 어떻게 알 수 있습니까? 또한 개별 세그먼트의 대략적인 기간 (예 : 40 픽셀 씩)을 고려해야합니다. 그런 식으로 누군가가 엉덩이가 바닥 근처에서 나오는 변형 된 "r"을 그린다면 같은 기호로 인식되지 않으므로 파일을 해독 할 수 없습니다.

세 번째 방법은 화면을 그리드 (아직 크기가 확실하지 않음)로 나누고 스트로크를 그린 셀을보고이 데이터를 사용하여 문자열을 생성하는 것입니다.

어떻게 구현할 수 있는지 다른 아이디어가 있습니까? 이런 식으로 들어 본 적이 있니? 이런 시스템이 작동하지 못하게하는 근본적인 결함이 있습니까?

감사합니다.

+0

흥미로운 문제와 철저한 대우. 명성. 불행히도 나는 고정 된 기호 데이터베이스 (예 : OCR 소프트웨어 사용)없이 충실도 문제를 해결할 수있는 방법을 찾지 못한다. –

+1

이 LaTeX 심볼 인식기에 관심이있을 수 있습니다. 매우 멋지다 : http://detexify.kirelabs.org/classify.html –

+0

흥미로운 문제.어떤 것을 제한하려고 시도한다면 - 작고 인식하기 쉬운 심볼 세트를 암호화 키로 변환하십시오. 하나의 심볼에서 전체 바이트 데이터를 얻을 수 있다면 ascii보다 낫습니다. ;) – ojrac

답변

2

작은 오류가있을 수 있습니다 keymaterial와 데이터를 암호화의 문제를 파악하지 알려지지 않은 파일 형식으로 파일을 저장하고 기대보다 훨씬 더 나은되지 않습니다 꽤 광범위하게 공부했다. 특히, 생체 데이터 (예를 들어, 지문 또는 망막 스캔)를 키로 사용하여 데이터를 보호하기위한 다수의 제안이있다. 일반적인 접근법은 적절한 오류 수정 코드를 사용하고 원래의 키 자료 K를 가져 와서 그 증후군을 계산하고 오직 증후군 만 저장하는 것입니다. 키 자료 K '의 두 번째 판독 값을 얻으면 K와 K'가 충분히 가까울수록 증후군을 사용하여 K '에서 K를 복원 할 수 있습니다 (여기서'충분히 근접 '은 오류 수정 체계에 따라 다릅니다).

시작하려면 여기 fuzzy vault scheme을 제안하는 문서가 있습니다. 이것은 "퍼지"키를 사용하는 암호화 체계에 대한 일반적인 제안입니다. 물론 여전히 안정적인 도면에서 특성을 추출하는 방법을 검토해야합니다. 이러한 오류 수정 체계를 사용하여 엔트로피를 추출 할 수 있습니다. 엔트로피에 대한 엔트로피의 양을 확인해야합니다. 암호가 엔트로피와 관련하여 나쁘다면, 이길 수는 없습니다.

+0

생체 지문을 재생산 가능한 암호 키로 변환하는 문제는이 아이디어와 공통점이 많아 보입니다. 따라서이 대답에 동의하고이를 탐구하는 학술 논문을 읽으십시오. – caf

0

제스처.

http://depts.washington.edu/aimgroup/proj/dollar/

당신은 당신이 특정 동작에 대한 알고리즘을 소유 정의 할 수 있습니다. EG a circle

1. 시작 지점을 찾으십시오. 2. 가장 왼쪽, 가장 오른쪽 및 가장 멀리있는 점을 찾아서 대략적인 반지름을 찾으십시오. 3. 반경 오차가있는 모든 점을 확인하십시오 (25 %?) 4. 반경이 확인되면 원이 생깁니다.

수직 직선 : 1. 시작점과 끝점 X 및 Y 위치를 확인하십시오. 2. 시작 지점과 끝 지점의 x와 y와 inbetween 점을 비교합니다. 3. 그들이 대략 같은 X 좌표이지만 Y 좌표가 오름차순이거나 내림차순 인 경우 수직선이 있습니다.

기타 등등 더 복잡한 제스처를 위해 더 복잡해지고 있습니다.

제스처를 결합 할 수도 있습니다. 6 가지 제스처에 대한 알고리즘이 있다고 가정 해 봅시다. 서로 결합하여 다른 기호를 형성 할 수 있습니다. 제스처가 생성되는 순서가 중요 할 수 있으므로 추가 보안 계층이 추가됩니다.

+0

그 접근법은 사전에 말한 기호 만 인식 할 수 있습니다. 여러분이 정말로 미쳐서 천 개의 기호를 인식하도록 가르치더라도, 그것은 여전히 ​​기호 사전에 무엇이 있는지 알고있는 공격자를 탐색 할 수있는 작은 키 공간입니다. –

+0

나는 그렇게 생각하지 않는다. 10 개의 제스처가 있고 각각의 "키"가 최소 3 개의 제스처로 구성되어 있다면 키 공간은 1000입니다. 15 개의 제스처가 있고 사용자가 15 개의 제스처를 모두 사용할 수 있다면 키 스페이스는 1307674368000 – gargantuan

+0

입니다. Schnaader의 색상 사용에 대한 제안은 수준을 높이고 상대적인 위치를 파악하는 것이 도움이 될 것입니다. – gargantuan

3

단순한 패턴 인식 - 저는 이것을 위해 직선과 대각선을 사용 하겠지만, 이론적으로 원형, 호 및 기타 요소를 추가 할 수도 있습니다.

방향이 바뀌면서 한 줄이 끝나고 다른 방향이 시작되면 방향 변경이 감지 될 수 있습니다 (또는 더 간단한 방법으로 펜을 감지하고 펜을 아래로 구분하여 줄 구분 기호로 사용할 수 있음) . 첫 번째 줄은 축척 비율을 제공하므로 다른 모든 줄의 길이를 인수로 나타낼 수 있습니다 (예를 들어 일반적인 L 모양에서는 첫 번째 세로 줄이 "기본 길이"b를 가지며 다른 줄은 대략 0.5 * b의 길이). 사용자가 끝나면 가장 작은 인수를 사용하여 길이를 "반올림"하여 [1 * s, 2 * s, 4 * s, 5 * s]와 같은 정수 길이 배열을 갖게됩니다. 이렇게하면 시스템이 너무 정확하지 않게되고 기본 길이를 사용하면 시스템이 확장에 강하게됩니다.

이제는이 정보 (길이 및 방향)를 문자열 (또는 원하는 해시 값)로 변환하고 기호가 변환되거나 크기가 조정 된 경우에도 동일한 획에 대해 동일하게됩니다.

또한 두 번째 줄 다음에 오는 모든 줄에 2D 오프셋 값을 저장할 수 있으므로 이렇게하지 않으면 줄도 같은 위치에 있어야합니다. , L과 T는 같은 문자열 (1 줄 위쪽 - 아래쪽, 1 줄 왼쪽 - 오른쪽 길이 0.5)을 얻을 가능성이 큽니다. 그래서 위치를 저장하는 것은 모든 것을 약간 강화하지만 선택 사항입니다.

편집 : 당신이 기본 각도로 첫 번째 줄의 각도를 가지고가는 경우에

, 당신도 회전이 강력 할 수 있습니다.

이 알고리즘은 모든 라인의 길이가 동일하고 최대 스트로크 당 최대 6-8 비트까지 가능할 경우에만 스트로크 당 3 비트를 제공하며, 위치를 저장할 경우 더 많은 비트를 제공합니다. 이것은 128 비트의 보안을 얻으려면 약 20-40 스트로크의 아주 복잡한 심볼을 필요로한다는 것을 의미합니다.

변형/보안을 추가하는 쉬운 방법은 사용자가 주어진 팔레트에서 다른 색상을 사용하게하는 것입니다.

사람이 당신을 볼 위험을 줄이려면, 그려진 후에 각 선을 사라지게하거나 배경과의 대비가 매우 낮은 색으로 색을 변경하십시오.

+0

기호를 다른 크기로 그릴 수있는 좋은 방법. – Senseful

1

필기 인식은 실제로 뇌졸중의 지속 시간을 실제 길이 이상으로 고려해야합니다. 이 감도 압력을 관련 동안, 나는 당신이 여기에 무슨 생각에 몇 가지 유사한 개념 비트를 볼 수 있습니다 생각

.... 같은 주제를 정확히 아니지만, 가장 가까운 일이 jdadesign.net/safelock/

그 순간 마음에 온다.

0

스트로크의 x, y 좌표를 모두 가져 와서 일종의 선형 2 웨이 연산을 수행하면 어떻게됩니까? 그런 다음 '근사값'해시를 계산할 수 있으며 획이 계산 될 때 계산 된 수치가 근사치의 10 %라고 가정하면 액세스 권한을 부여합니다.

+2

파일을 해독하는 유일한 방법은 생성 된 해시 값을 사용하는 것이므로 액세스 권한을 실제로 부여 할 수 없습니다. (예를 들어 정보를 암호화하기 위해 AES를 사용하고 있다고 가정). 암호 해독 키는 보안 위험이 있으므로 어 @ 곳에도 저장되지 않습니다. 내가 데이터를 해독하는 유일한 방법은 생성 된 해시 값을 사용하는 것이므로 정확해야합니다. – Senseful

1

나는 당신이 충분히 얻을 수 있다고 생각하지 않습니다. 보안 암호화를 수행하기 위해 손으로 그려진 기호에서 "비트"를 가져옵니다. 그림에서 자연스러운 변형이 용인 될 것이라는 점을 인식해야합니다. 즉, 스트로크에서 노이즈를 제거하고 재현성있는 신호로 부드럽게해야합니다. 그러나 잡음 (높은 엔트로피)은 더 나은 암호 키를 만듭니다.

이렇게 생각하십시오. 제스처를 위, 아래, 왼쪽 및 오른쪽 세그먼트로 분해 한 경우 각 세그먼트는 2 비트의 정보를 나타냅니다. AES 키의 경우 기호에는 64 개의 세그먼트가 필요합니다. 그것은 기억하기 매우 복잡한 제스처입니다. 또한 여러 세그먼트를 반복하여 단순화하면 ("오른쪽, 오른쪽, 오른쪽, ...") 비열한 (예측할 수없는 비 임의) 키를 만듭니다.

+0

+1 낮은 엔트로피 문제에주의를 환기시키기 위해 알고리즘을 신중하게 선택하여 충분한 비트를 얻을 수는 있지만 (사용자가 너무 쉽게 기호를 선택할 수는 없지만 약한 경우와 거의 같습니다 암호) – schnaader

0

모든 공격을 막으려 고합니다. 공격자가 암호화 된 파일에 대한 완전한 액세스 권한이 있다고 가정하는 암호화에 전적으로 의존하려면 적절한 수준의 보호를 달성하기 위해 많은 양의 엔트로피가 필요합니다. 알고리즘을 올바로 사용한다고 가정하면 두 비트를 입력 비트 수 (엔트로피 입력 가능 수)로 나눌 수 있으며 키 설정 절차에 걸리는 시간이 곱해집니다. 공격자가 컴퓨팅 능력을 얼마나 더 많이 차지하는 지 나누고 무차별 공격으로 암호화를 해독하기 위해 공격자가 취해야하는 시간을 확보하십시오.

예를 들어, 안드로이드의 9 셀 그림 잠금 해제 방법과 같은 것으로 약 16 비트의 엔트로피가 발생할 수 있습니다. 암호화 키를 계산하기 위해 5 초의 CPU 시간을 사용한다고 가정합니다. 그런 다음 평균적인 PC를 사용하면 5 * 2 ** 16/20 초가 걸리거나 금이는 데 약 4.5 시간이 소요됩니다. 입력 및 암호화의 키 - 설정 및 암호화의 엔트로피 손실은 컴퓨터 클러스터가 사용되는 것은 말할 것도없고, 단 몇 분만에 신속하게 해결됩니다.

솔직히, 그건 그냥 아무도왔다

1

이 점에 대해 생각해보십시오. 저는 겸손한 사람은 아니지만 비슷한 사람이 될 것입니다. 이 일.

어떤 기호 나 "패턴"을 사용한다고 가정 해 봅니다. 분석을 위해 남은 유일한 실행 가능 요소는 touchBegan, touchMoved 및 touchEnded 이벤트에서 생성 된 패턴의 모든 포인트입니다.

그래서 ... 생성 된 모든 포인트를 100 또는 1,000,000으로 가져 가자. 실제로 중요하지 않습니다.

그룹으로 원하는 수만큼 그룹으로 나눕니다. 더 많은 즐거움을 줄 수 있지만이 예제에서는 4 개의 그룹으로 나누어 보겠습니다. 100 점으로 그룹 1은 점 1> 25를 포함하고 그룹 2에는 26> 50을 포함합니다.

각 그룹에 대해 모든 포인트를 사용하여 평균 위치를 계산하십시오.

캔버스 공간이 그리드로 나누어지고 '평균 위치'가 가장 가까운 좌표에 플롯되면 더 잘 작동합니다.

그런 다음 모든 그룹 간의 상대적인 거리를 확인하십시오. 그래서 1,2,1 1,3 1,4 2,3 2,4 3,4 사이.

이제 키를 생성 할 수있는 별개의 점과 해당 점에 대한 정보가 있습니다. 평균과 그리드는 엔트로피 전부는 아니더라도 일부를 부드럽게하는 데 도움이됩니다.

사용자에게 패턴을 몇 번 그리고 이전 시도에서 그룹별로 각 그룹을 비교해야 할 수도 있습니다. 이렇게하면 사용자가 일관되게 계획 할 수있는 그룹을 식별 할 수 있습니다. 자신의 패턴을 그리는 데 사용자의 손을 훈련시키는 이점이 있습니다.

내가 가진 포인트와 그룹이 많을수록 정확할 것입니다.

사실, 직접 해보겠습니다.

+0

흥미로운 구현 ... 일관되게 작동하도록 할 수 있는지 알고 싶습니다. – Senseful

관련 문제