2014-07-21 4 views
1

나는 안드로이드 기기에서 SHA에 사용할 수있는 반복 횟수를 알아 내야 만하는 문제를 다루고 있습니다. 어려움은 안드로이드 2.x로 다시 돌아가는 것을 지원하고 있기 때문에, 나는 세대의 마지막 몇 세대 사이의 계산력의 차이가 크기 때문에 엄청나게 빠른 라운드 수를 사용할 수 없다. 숫자가 너무 낮아서 안전하지 못하거나 너무 높을 수도 있고 로우 엔드 전화기를 너무 길게 계산할 수도 있습니다.안드로이드에서 SHA 반복을위한 라운드 계산하기

처음 시작시 스레드를 사용하여 전화 당 기준으로 좋은 수를 찾기 위해 증가하는 라운드 수를 계산하려고합니다 (기준 라운드 수에서 시작하십시오. if 시간이 임계 값 미만인 경우, 숫자를 올리고 시간이 임계 값 미만인지 확인하십시오. 임계 값이 초과 될 때까지 반복하십시오). 문제는 필자가 시스템 시간을 사용하여 계산이 끝나는 시간을 확인하는 것입니다. 그러나 컨텍스트 전환은 인위적으로 시간 값을 늘려서 전화의 CPU 전력의 일부가 탭되기 전에 분석을 일찍 끝내야합니다.

처음 분석을위한 기본 UI 스레드에서이 분석을 실행할 때 사용자가 기다리지 않고이 문제를 해결할 수있는 방법이 있습니까?

편집 : 적어도 타이밍이 엉망이되는 컨텍스트 전환이라고 생각합니다. 이것을 기본 UI 스레드에서 실행할 때 예상대로 반복 분석 코드가 실행되며 SHA 해싱이 얼마나 오래 걸리는지에 이상한 딸꾹질이 없습니다. 별도의 스레드에서 실행하면 반복 분석의 첫 번째 몇 단계 만 수행하면됩니다. 그러면 해시가 처리되는 데 걸리는 시간 (대부분의 경우)이 갑작스럽게 빨라지고 메서드가 중간에 종료됩니다.

답변

0

아, 나는 그 문제를 생각하는 것이 끝났다는 것을 깨달았다. 문맥 전환이 내 문제를 던지려고 할 때, 나는 "기록 된 밀리 초가 X보다 크면 문맥 전환이 일어 났으므로 무시하고 계속하라"고 기본적으로 말한 상위 임계 값을 설정하려고 시도했다. 때때로 문맥 스위치가 더 낮은 임계 값보다 약간 높일 수 있기 때문에 이것은 작동하지 않았습니다. 방금 ​​마지막 시도와 현재 시도의 차이점을 비교해야한다는 것을 알았습니다. 라운드 수를 늘리는 데 사용되는 값이 작기 때문에 차이가 약 70 - 80ms보다 크면 이상이 발생했음을 알고 무시해야합니다.

+0

다행이긴하지만, 이런 종류의 구조는 일반적으로 암호 기반 키 유도 (함수)에만 사용된다는 점을 명심하십시오. 이 경우 공격자가 사용할 수있는 컴퓨터 전원의 양에만주의해야합니다. 대신 암호 (또는 시스템 보안)를 강화하는 것이 좋습니다. –

+0

나는 당신의 요지를 완전히 이해하지만, 불행하게도 나는 이것들을 얼마나 멀리 가져갈 수 있는지 UX 요구 사항에 의해 제한을 받는다. – JBires