KR101454469B1 - 암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법 - Google Patents

암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법 Download PDF

Info

Publication number
KR101454469B1
KR101454469B1 KR1020110134813A KR20110134813A KR101454469B1 KR 101454469 B1 KR101454469 B1 KR 101454469B1 KR 1020110134813 A KR1020110134813 A KR 1020110134813A KR 20110134813 A KR20110134813 A KR 20110134813A KR 101454469 B1 KR101454469 B1 KR 101454469B1
Authority
KR
South Korea
Prior art keywords
array
value
constant
sha
item
Prior art date
Application number
KR1020110134813A
Other languages
English (en)
Other versions
KR20130085512A (ko
Inventor
이상수
최우용
김영수
김건우
이주영
길연희
조수형
홍도원
은성경
조현숙
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020110134813A priority Critical patent/KR101454469B1/ko
Publication of KR20130085512A publication Critical patent/KR20130085512A/ko
Application granted granted Critical
Publication of KR101454469B1 publication Critical patent/KR101454469B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/45Structures or tools for the administration of authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Abstract

본 발명은 SHA-1 해쉬값 계산을 위해 64바이트 데이터 세그먼트로부터 4바이트 변수들로 구성된 배열을 생성하는 과정에서, 배열 중에서 배열값이 상수인 항목을 검출하는 단계 및 배열값이 상수인 항목을 배열에서 제외하는 단계를 포함하는 것을 특징으로 한다.

Description

암호화된 MICROSOFT OFFICE 2007 파일에 대한 패스워드 검사 과정의 고속화 방법{A METHOD FOR FAST PASSWORD RECOVERY METHOD AGAINST AN ENCRYPTED MS-OFFICE 2007 FILE}
본 발명은 패스워드 복구 기술에 관한 것으로, 더욱 상세하게는 Microsoft Office 2007 파일을 암호화하기 위해 사용자가 설정한 패스워드를 복구하는 방법에 관한 것이다.
Microsoft Office 2007 프로그램은 RSA사의 PKCS#5의 권고내용에 따라 사용자가 입력한 패스워드를 변환하여 실제 암호에 필요한 키 값을 유도한다. 이렇게 입력된 패스워드를 분실할 경우 암호화된 파일에 포함된 정보들을 영구적으로 회복할 수 없게 된다.
암호화된 정보 혹은 파일로부터 정확한 패스워드를 복구하기 위해서는 다양한 기술들이 사용되고 있으며, 그중 전수조사는 가장 확실한 패스워드 복구 기술임에도 조사해야할 패스워드의 범위에 따라 상당한 시간이 소모될 수 있어 이를 고속으로 수행하기 위한 다양한 기술들이 연구되어 왔다.
이러한 패스워드 검사 작업의 고속화에는 FPGA(Field-Programmable Gate Array)나 그래픽 프로세서(GPU)와 같은 특수한 하드웨어를 이용하는 것이 일반적이나 이를 더욱 효과적으로 수행하기 위해서는 검사 과정의 최적화 작업을 선행한 후, 이를 사용하고자 하는 시스템에서 적절하게 구현하여야 한다.
종래에는 암호화된 Microsoft Office 2007 파일에 대해 사용자가 입력한 패스워드에 대한 일치 여부를 파악하기 위해 많은 횟수의 SHA-1 알고리즘의 처리가 수행된다. 특히 SHA-1 알고리즘의 처리는 패스워드 검증과정에서 첫 번째 해쉬 계산이후 50000번의 루프문을 통해 수행되는 해쉬 계산에 많은 컴퓨팅 파워가 소모되어 포렌식 수사나 패스워드 복구 서비스를 위해 대량의 패스워드 문자열을 검사할 경우 그 처리 속도를 현저히 저하시키는 원인으로 작용하고 있다.
본 발명의 배경기술은 대한민국 공개특허 10-2010-0073114호(2010.07.01)의 '그래픽 프로세서를 이용한 패스워드 고속 탐색 장치 및 방법'에 개시되어 있다.
본 발명은 전술한 문제점을 개선하기 위해 창작된 것으로서, Microsoft Office 2007 프로그램의 패스워드 변환 과정 중에 수행되는 SHA-1 해쉬값의 계산에 있어 배열 내에 상수값을 갖는 항목을 소거하여 처리 성능을 높이고 처리 시간을 감소시키는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법을 제공하는데 그 목적이 있다.
본 발명의 일 측면에 따른 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법은 SHA-1 해쉬값 계산을 위해 64바이트 데이터 세그먼트로부터 4바이트 변수들로 구성된 배열을 생성하는 과정에서, 상기 배열 중에서 배열값이 상수인 항목을 검출하는 단계; 및 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계를 포함하는 것을 특징으로 한다.
본 발명에서, 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계는 상기 배열값이 상수인 항목을 상기 배열에서 소거하는 것을 특징으로 한다.
본 발명에서, 상기 배열값이 상수인 항목은 상기 배열 중 입력 데이터 길이가 24바이트로 고정되는 항목인 것을 특징으로 한다.
본 발명은 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계에서, 상기 배열값이 상수인 항목의 상기 배열값이 0x00000000 이면, 상기 배열값이 상수인 항목에 0을 기입하는 것을 특징으로 한다.
본 발명은 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계에서, 상기 배열값이 상수인 항목의 상기 배열값이 0x80000000 또는 0x000000c0 이면, 상기 배열값이 상수인 항목에 0x80000000 또는 0x000000c0 을 각각 기입하는 것을 특징으로 한다.
본 발명에서, 상기 SHA-1 해쉬값 계산은 루프문 속에 내부 루틴을 직접 나열하는 직접 나열방식으로 처리하는 것을 특징으로 한다.
본 발명은 Microsoft Office 2007 프로그램이 사용자가 입력한 패스워드의 일치 여부를 확인하는 과정에서 수행하는 SHA-1 해쉬 알고리즘의 처리 코드가 최적화됨으로써 전체적인 패스워드 검사 속도를 향상시키고 처리 시간을 감소시킨다.
도 1 은 본 발명의 일 실시예에 따른 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법의 순서도이다.
도 2 는 도 1 의 배열 내에 상수값을 갖는 항목을 소거하여 SHA-1 처리를 수행하는 과정을 도시한 순서도이다.
도 3a 및 도 3b 는 본 발명의 적용 대상이 되는 Microsoft사의 Office 2007 프로그램에서 암호화된 Office 2007 파일에 대해 사용자가 입력한 패스워드의 일치여부를 판단하기 위해 수행하는 과정을 C-언어 문법으로 구현한 내용을 나타낸 도면이다.
도 4 는 Microsoft사의 Office 2007 프로그램이 사용자가 입력한 패스워드를 유니코드(Unicode)형태로 확장하는 내용에 대한 예를 나타낸 도면이다.
도 5a 는 RFC3174에 기재된 SHA-1 알고리즘의 처리 루틴 중 64바이트의 사용자의 입력데이터를 이용하여 64바이트 세그먼트를 구성한 후, 이로부터 4바이트 길이의 변수 80개로 구성된 배열을 생성하는 내용을 나타낸 도면이다.
도 5b 및 5c 는 RFC3174에 기재된 SHA-1 알고리즘의 처리 루틴 중, 84바이트 길이의 변수 80개로 구성된 배열로부터 순차적으로 해쉬값을 계산하는 과정에 대한 내용을 나타낸 도면이다.
도 6a 및 6b 는 본 발명의 대상인 Microsoft Office 2007 프로그램의 패스워드 검증 과정에서 50000만번의 SHA-1 해쉬값 계산 루프내에서의 실행처리문의 감소를 위한 내용을 나타낸 도면이다.
도 6c 는 도 6a 와 도 6b 에서 나타낸 80개의 배열항목이 70개로 줄어들었을 경우 서로 일치하는 항목들을 연결한 것을 나타낸 도면이다.
도 6d 는 도 5b 에 나타낸 해쉬값 계산 과정에 대해 도 6a 와 도 6b 와 같은 70개 항목의 배열을 적용하는 과정에 대한 코드를 나타낸 도면이다.
도 7a 및 도 7b 는 도 3a 및 도 3b 와 같이 패스워드 검증 과정에서 SHA-1 알고리즘의 처리를 함수 호출 방식이 아니라 내부 처리 루틴들을 50000번의 루프 속에 직접 나열(unroll)할 경우 최적화된 코드 구현 내용을 나타낸 도면이다.
이하에서는 본 발명의 일 실시예에 따른 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법을 첨부된 도면을 참조하여 상세하게 설명한다. 이 과정에서 도면에 도시된 선들의 두께나 구성요소의 크기 등은 설명의 명료성과 편의상 과장되게 도시되어 있을 수 있다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례에 따라 달라질 수 있다. 그러므로, 이러한 용어들에 대한 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1 은 본 발명의 일 실시예에 따른 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법의 순서도이고, 도 2 는 도 1 의 배열 내에 상수값을 갖는 항목을 소거하여 SHA-1 처리를 수행하는 과정을 도시한 순서도이며, 도 3a 및 도 3b 는 본 발명의 적용 대상이 되는 Microsoft사의 Office 2007 프로그램에서 암호화된 Office 2007 파일에 대해 사용자가 입력한 패스워드의 일치여부를 판단하기 위해 수행하는 과정을 C-언어 문법으로 구현한 내용을 나타낸 도면이며, 도 4 는 Microsoft사의 Office 2007 프로그램이 사용자가 입력한 패스워드를 유니코드(Unicode)형태로 확장하는 내용에 대한 예를 나타낸 도면이며, 도 5a 는 RFC3174에 기재된 SHA-1 알고리즘의 처리 루틴 중 64바이트의 사용자의 입력데이터를 이용하여 64바이트 세그먼트를 구성한 후, 이로부터 4바이트 길이의 변수 80개로 구성된 배열을 생성하는 내용을 나타낸 도면이며, 도 5b 및 5c 는 RFC3174에 기재된 SHA-1 알고리즘의 처리 루틴 중, 84바이트 길이의 변수 80개로 구성된 배열로부터 순차적으로 해쉬값을 계산하는 과정에 대한 내용을 나타낸 도면이며, 도 6a 및 6b 는 본 발명의 대상인 Microsoft Office 2007 프로그램의 패스워드 검증 과정에서 50000만번의 SHA-1 해쉬값 계산 루프내에서의 실행처리문의 감소를 위한 내용을 나타낸 도면이며, 도 6c 는 도 6a 와 도 6b 에서 나타낸 80개의 배열항목이 70개로 줄어들었을 경우 서로 일치하는 항목들을 연결한 것을 나타낸 도면이며, 도 6d 는 도 5b 에 나타낸 해쉬값 계산 과정에 대해 도 6a 와 도 6b 와 같은 70개 항목의 배열을 적용하는 과정에 대한 코드를 나타낸 도면이며, 도 7a 및 도 7b 는 도 3a 및 도 3b 와 같이 패스워드 검증 과정에서 SHA-1 알고리즘의 처리를 함수 호출 방식이 아니라 내부 처리 루틴들을 50000번의 루프 속에 직접 나열(unroll)할 경우 최적화된 코드 구현 내용을 나타낸 도면이다.
Microsoft Office 2007 프로그램은 다음과 같은 과정을 통해 사용자가 입력한 패스워드 문자열이 실제 암호화를 위해 입력한 패스워드와 일치하는지를 판별한다. 이를 설명하기 위해 사용자가 "test"라는 4바이트 문자열을 패스워드로 입력하였을 경우 이의 검사 과정을 순서대로 기술한다.
참고로, 암호화된 파일로부터 각각 길이가 16바이트인 salt와 EncryptedVerifier, 그리고 32바이트 길이의 EncryptedVerifierHash 데이터를 이미 읽어온 것으로 가정하였고 테스트를 위한 패스워드는 "test"로 지정하였으며 C-language 문법을 이용하였다.
이하, 도 1 내지 도 4 를 참조하여 본 발명의 일 실시예에 따른 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법을 상세하게 설명한다.
먼저, 일단 사용자가 입력한 패스워드를 도 4 에 도시된 바와 같이, 2배 길이의 유니코드 형태로 변환한다(S10). 도 4 에서, 'test' 문자열의 아스키 코드 값과 이를 유니코드로 변환한 값을 각각 나타낸다.
다음으로, 암호화된 파일에 기록되어 있는 16바이트의 Salt 값과 이전 단계에서 만들어진 문자열을 순서대로 배열한 후 이에 대한 SHA-1 해쉬 계산을 수행하여 20바이트의 해쉬 결과를 얻는다(S20).
다음으로, 50000 번의 SHA-1 처리를 수행하는데, 이를 위한 입력 데이터의 길이는 매회 24바이트이다. 입력 데이터의 초기 4바이트(count)는 0에서 49999까지 1씩 순차적으로 변한다. 나머지 20바이트의 HashResult는 앞선 SHA-1 처리에서 얻어진 계산값이 저장된다. 즉, 초기 count 값이 0일 경우에는 첫 번째 SHA-1 계산에서 얻어진 결과값이 HashResult에 저장되어 있다. count와 HashResult로 이루어진 24바이트 값에 대한 SHA-1을 수행하여 그 결과 값을 다시 HashResult에 저장하고 count 는 1이 된다. 이러한 과정을 count가 49999가 될 때까지 수행한다.
이 과정에서, 도 2 에 도시된 바와 같이, 배열 내에 상수값을 갖는 항목을 검출하고, 검출된 상수값을 갖는 항목을 소거하여 처리 속도 및 처리 시간을 감소시킨다(S30). 이는 도 2 를 참조하여 더욱 상세하게 후술한다.
다음으로, 앞서의 count가 49999일 때 얻어진 SHA-1 계산 값을 HashResult에 저장하고 count는 다시 0으로 설정한다. 그리고 HashResult과 count 순으로 이루어진 24바이트 데이터에 대한 SHA-1 계산을 수행하고 그 결과값 20바이트를 얻는다(S40).
SHA-1 계산후, 이전 과정에서의 해쉬 결과값 20바이트와 각 바이트가 0x36값을 가지는 64바이트 배열과의 XOR를 수행하고 그 결과로 얻어진 64바이트 데이터에 대한 SHA-1 계산을 수행한다(S50).
이후, 해쉬 결과값 20바이트 중 초기 16바이트를 이용하여 AES-128비트 알고리즘 수행을 위한 키 값으로 입력하여 10개의 라운드 키를 얻는다. 얻어진 라운드 키를 이용하여 암호화된 파일로부터 추출한 16바이트의 EncryptedVerifier와 32바이트의 EncryptedVerifierHash 각각에 대해 AES-128비트 복호화를 수행한다(S60).
마지막으로, EncryptedVerifier의 복호화 작업 결과 16바이트에 대한 SHA-1 계산을 수행하고 그 결과 얻어진 20바이트 결과값과 EncryptedVerifierHash로부터 복호화된 32바이트 데이터 중 초기 20바이트의 값이 동일할 경우 입력된 패스워드 문자열 "test"는 정확한 것으로 판단된다(S70).
일반적으로, SHA-1 알고리즘은 Internet Engineering Task Force(이하 IETF)의 표준화문서인 Request For Comment(이하 RFC)의 3174번에서 규정하고 있다.
SHA-1 알고리즘은 사용자가 입력한 데이터를 64바이트 단위로 구분하여 해쉬값을 계산한 후 이 값을 다음 64바이트의 해쉬 계산에 반영하는 구조이다. 입력데이터가 64바이트 미만일 경우 표준에서 정한 Padding Data(={0x80, 0x00, 0x00, ...})를 추가하여 56바이트 크기의 데이터를 만들고, 이어지는 8바이트에는 입력데이터의 길이를 비트값으로 표현한 값을 삽입하여 64바이트 단위를 만든다.
SHA-1에서는 입력길이를 나타내기 위해 4바이트 길이를 가지는 필드 두 개를 사용하며 RFC 3174에서는 이를 각각 Length High와 Length Low로 표시한다. 즉 입력데이터의 길이를 8바이트 필드에 표시한다고 가정할 경우, 상위 4바이트는 Length High에, 하위 4바이트는 Length Low에 해당한다. 따라서, 입력데이터의 비트 길이가 0xA00000ABC라면 Length High는 0x0A이고 Length Low는 0x00000ABC가 된다.
일단 64바이트의 데이터가 준비되면 다시 이를 4바이트씩 순서대로 분리하여 Big Endian으로 변환한 16개의 데이터 세그먼트를 얻는다. 이렇게 생성된 4바이트 값들을 SHA-1에서 규정한 알고리즘에 대입하여 새로운 64개의 4바이트 값을 생성한다. RFC 3174에서는 이를 80개의 unsigned integer값을 가지는 배열(=W[80])에 저장한다.
도 5a 는 RFC 3174에서 상기 과정을 C언어로 구현한 내용을 나타낸다.
80개의 4바이트 값들을 이용하여 도 5a 와 같은 과정을 통해 초기화된 A, B, C, D, E 값들을 변형시킨다. 최종적으로 얻어진 A, B, C, D, E값들이 SHA-1 해쉬 결과이다. 도 3b 는 RFC 3174에서 상기 과정을 C언어로 구현한 내용을 나타낸다.
SHA-1 계산에서 64바이트 미만의 데이터에 경우 덧붙여지는 Padding Data는 최초 1개 바이트의 값이 0x80이고 나머지는 모두 0x00이다. Padding Data와 길이값을 포함한 64바이트 데이터로부터 생성되는 80개의 4바이트 데이터 배열들에 적용되는 연산은 수리적 '+' 연산과 논리적 'XOR' 뿐이므로 0x00 값은 이들 연산에 어떤 영향도 미치치 않는다. 따라서, Office 2007의 패스워드 검사를 위해 수행되는 SHA-1 해쉬값의 계산 과정에서 소거가 가능한 부분이 발생하게 된다.
본 발명에서는 Microsoft Office 2007 프로그램의 패스워드 변환 과정 중 수행되는 SHA-1 해쉬값의 계산에 있어 불필요한 여러 가지 처리 내용을 소거함으로써 처리 성능을 높이고 이를 통해 처리 시간을 감소시킬 수 있도록 한다.
이하, 도 2 를 참조하여 상기한 SHA-1 해쉬 계산을 수행하는 과정에서, 배열 내에 상수값을 갖는 항목을 검출하고, 검출된 상수값을 갖는 항목을 소거하여 처리 속도 및 처리 시간을 감소시키는 과정(S30)을 도 2 를 참조하여 상세하게 설명한다.
도 1 과 도 3a 및 도 3b 에 나타낸 것처럼 Office 2007의 패스워드 검증과정 중 50000번의 루프 속에서 SHA-1 계산이 반복될 때의 입력데이터로는 루프의 순서를 나타내는 0 ~ 49999 까지의 4바이트 값과 직전에 수행된 SHA-1 해쉬 결과값이 순서대로 입력된다.
즉, 루프번호 0에서 첫 번째 4바이트 값은 0x00000000이고 다음은 Salt 값을 이용해 직전에 계산한 해쉬값이 입력으로 사용된다.
다음 루프번호 1번에서는 첫 번째 4바이트 값이 0x00000001이고 다음으로 루프번호 0번에서 얻어진 해쉬값이 입력된다. 따라서 매번의 입력데이터의 길이가 24바이트로 고정되므로 Padding Data를 포함한 Length High와 Length Low 필드의 값들로 이루어진 40바이트 길이의 값으로 16개의 배열을 만들 경우 다음과 같은 값을 가지게 된다.
W[0] = Variable // Loop order in 4-Byte //
W[1] = Variable // Previous Hash Result : A //
W[2] = Variable // Previous Hash Result : B //
W[3] = Variable // Previous Hash Result : C //
W[4] = Variable // Previous Hash Result : C //
W[5] = Variable // Previous Hash Result : D //
W[6] = 0x80000000 // Padding starts //
W[7] = 0x00000000 // Padding... //
W[8] = 0x00000000 // Padding... //
W[9] = 0x00000000 // Padding... //
W[10] = 0x00000000 // Padding... //
W[11] = 0x00000000 // Padding... //
W[12] = 0x00000000 // Padding... //
W[13] = 0x00000000 // Padding ends //
W[14] = 0x00000000 /* Length High */
W[15] = 0x000000c0 /* Length Low (24 * 8 = 192 = 0xc0 */
나머지 64개의 배열값을 생성하는 과정에서 위의 16개 배열값이 사용되는 항목이 존재하는데 만약 W[7] ~ W[14]가 연산에 이용하는 부분에서는 0이므로 연산과정에서 해당 항목을 검출하여 소거한다(S32,S34).
그리고 W[6]과 W[15]의 경우는 배열에 접근하여 값을 얻을 필요없이 각각 0x80000000 과 0x000000c0의 값을 직접 기입하면 된다.
즉, W[6] ~ W[15]에 해당하는 값은 별도로 저장하지 않고 각 항이 연산에 이용되는 부분에 상수로 기입(S36)할 경우 컴퓨팅 과정에서의 메모리 접근 등에 구애를 받지 않으므로 처리 속도가 향상된다. 즉, 80개의 4바이트 배열이 아니라 70개의 4바이트 배열만을 사용하면 되므로 메모리 소모도 줄일 수 있게 된다.
도 6a 와 도 6b 는 상기한 16개의 배열에서 상수항들의 값을 대입하여 나머지 64개의 배열을 생성하는 코드를 보여주고 있다. 도시된 바와 같이, 70개의 배열중에서 W[6] ~ W[21]까지가 상수항의 사용에 영향을 받는 항목으로 이 부분의 연산에서 컴퓨팅 파워의 소모가 줄어든다.
도 6c 는 80개의 배열과 10개의 상수항을 소거할 경우 사용하는 70개의 배열에서 각각 일치하는 항목을 나타낸다.
RFC 3174에서는 도 5b 와 도 5c 에 도시된 바와 같이, 80개의 배열에 대해 20개씩에 서로 다른 계산 항목을 기입하여 A, B, C, D, E값을 순차적으로 변환한다. 그러나, 계산 항목에서 단지 초기의 temp 값 계산의 내용만이 아래 표와 같이 다를 뿐 이후의 A, B, C, D, E값의 치환 내용은 모두 동일하다.
RFC3174에서 20개의 W 배열마다 서로 다른 temp 값 계산식
W 배열 temp 계산식
W[0] ~ W[19] SHA1CircularShift(5,A) + ((B & C)│((~B) & D)) + E + W[t] + K[0];
W[20] ~ W[39] SHA1CircularShift(5,A) + ((B & C)│(B & D)│(C & D)) + E + W[t] + K[2]
W[40] ~ W[59] SHA1CircularShift(5,A) + ((B & C)│(B & D)│(C & D)) + E + W[t] + K[2]
W[60] ~ W[79] SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3]
전술한 바와 같이, 본 발명에서는 70개의 W 배열만 사용하고 10개의 상수항을 저장하지 않고 있으므로 실재로는 W[0] ~ W[9]까지가 표 1 의 첫 번째 temp 값 계산식에 적용된다. 물론 10개의 상수항에 대해서도 동일한 계산식이 적용된다.
이를 자세히 살펴보면 다음과 같다. 일단, W 배열이 생성된 후 A, B, C, D, E는 도 1에서 나타낸 것처럼 컨텍스트 초기화 과정(SHA1Reset)을 통해 실제로는 각각 0x67452301, 0xEFCDAB89, 0x98BADCFE 0x10325476, 0xC3D2E1F0로 초기화된다. 또한, K[0], K[1], K[2]. K[3]은 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6로 정의되어 있으므로 W[0]에 대한 temp 값의 계산식은 다음과 같이 고정될 수 있다.
temp = SHA1CircularShift(5, 0x67452301) + ((0xEFCDAB89 & 0x98BADCFE) | ~(0xEFCDAB89) & (0x10325476)) + 0xC3D2E1F0 + W[0] + 0x5A827999;
위 식에서 W[0] 항목을 제외한 고정 상수부분만을 미리 계산하면 0x9FB498B3 가 얻어지므로 위 식은 다음과 같은 식으로 바뀔 수 있다.
temp = W[0] + 0x9FB498B3;
W[0]항을 이용한 계산과정을 통해 A, B, C, D, E는 변화되므로 더 이상 이들을 상수항으로 처리할 수 없다. 따라서, 이후의 모든 W 배열을 이용한 A, B, C, D, E의 계산은 기본적으로 RFC에서의 계산방식과 동일하게 전개된다. 다만 상수항을 이용한 계산과정에서 상수항의 값이 0x00000000일 경우는 0x80000000, 0x000000c0에 따라 동일한 temp 값 계산식 내에서도 상수처리항의 차이가 발생한다.
도 6d 와 도 6e 및 도 6f 는 W[0]을 이용한 A, B, C, D, E 계산식과 10개의 상수항 각각에 대한 A, B, C, D, E 계산식을 순서대로 기술하고 있다.
단일 SHA1 계산에서 전술한 바와 같이 상수항을 적용하여 계산 과정을 줄인다 하여도 계산량의감소는 실제 크지 않지만, 50000번이 반복될 경우 영향의 누적으로 인해 그 차이는 크게 발생하게 된다.
이 후, W[6] ~ W[9]까지는 표 1의 첫 번째 temp 계산식을 이용하여 RFC상의 계산과 동일하게 A, B, C, D, E를 계산한다.
이 후, W[10] ~ W[29]까지는 표 1의 두 번째 temp 계산식을 이용하여 RFC상의 계산과 동일하게 A, B, C, D, E를 계산한다.
이 후, W[30] ~ W[49]까지는 표 1의 세 번째 temp 계산식을 이용하여 RFC상의 계산과 동일하게 A, B, C, D, E를 계산한다.
이 후, W[50] ~ W[69]까지는 표 2의 네 번째 temp 계산식을 이용하여 RFC상의 계산과 동일하게 A, B, C, D, E를 계산한다.
또한 도 3a 및 도 3b 에 도시한 바와 같이, RFC 3174의 레퍼런스 코드상에 구현된 방식으로 SHA-1의 처리 단계를 함수화하여 호출(Function Call)할 경우 실행 코드의 크기는 줄어들지만 대신 매번 호출마다 실행 코드상에서의 분기가 발생하여 이 또한 처리속도의 저하를 초래한다. 이와는 달리 연산 과정을 직접 루프문안에 나열(unroll)할 경우 루프가 반복되더라도 각 과정간의 데이터 전달을 위한 파이프라인이 유지됨으로써 처리성능의 향상을 가져오게 된다.
도 7a 및 도 7b 는 Microsoft office 2007의 패스워드 검증과정에서 50000번의 루프문을 통해 SHA-1을 처리하는 과정에서 함수호출 방식이 아닌 직접 나열방식으로 SHA-1을 처리할 경우의 효과적인 나열 순서를 나타내고 있다
본 발명은 도면에 도시된 실시예를 참고로 하여 설명되었으나, 이는 예시적인 것에 불과하며, 당해 기술이 속하는 분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서 본 발명의 기술적 보호범위는 아래의 특허청구범위에 의해서 정하여져야 할 것이다.

Claims (6)

  1. 컴퓨팅 장치가 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정을 고속화하기 위한 방법에 있어서,
    SHA-1 해쉬값 계산을 위해 64바이트 데이터 세그먼트로부터 4바이트 변수들로 구성된 배열을 생성하는 과정에서, 상기 배열 중에서 배열값이 상수인 항목을 검출하는 단계; 및
    상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계를 포함하는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법.
  2. 제 1 항에 있어서, 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계는 상기 배열값이 상수인 항목을 상기 배열에서 소거하는 것을 특징으로 하는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법.
  3. 제 1 항에 있어서, 상기 배열값이 상수인 항목은 상기 배열 중 입력 데이터 길이가 24바이트로 고정되는 항목인 것을 특징으로 하는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법.
  4. 제 1 항에 있어서, 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계에서,
    상기 배열값이 상수인 항목의 상기 배열값이 0x00000000 이면, 상기 배열값이 상수인 항목에 0 을 기입하는 것을 특징으로 하는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법.
  5. 제 1 항에 있어서, 상기 배열값이 상수인 항목을 상기 배열에서 제외하는 단계에서,
    상기 배열값이 상수인 항목의 상기 배열값이 0x80000000 또는 0x000000c0 이면, 상기 배열값이 상수인 항목에 0x80000000 또는 0x000000c0 을 각각 기입하는 것을 특징으로 하는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법.
  6. 제 1 항에 있어서, 상기 SHA-1 해쉬값 계산은 루프문 속에 내부 루틴을 직접 나열하는 직접 나열방식으로 처리하는 것을 특징으로 하는 암호화된 Microsoft Office 2007 파일에 대한 패스워드 검사 과정 고속화 방법.
KR1020110134813A 2011-12-14 2011-12-14 암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법 KR101454469B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110134813A KR101454469B1 (ko) 2011-12-14 2011-12-14 암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110134813A KR101454469B1 (ko) 2011-12-14 2011-12-14 암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법

Publications (2)

Publication Number Publication Date
KR20130085512A KR20130085512A (ko) 2013-07-30
KR101454469B1 true KR101454469B1 (ko) 2014-10-24

Family

ID=48995664

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110134813A KR101454469B1 (ko) 2011-12-14 2011-12-14 암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법

Country Status (1)

Country Link
KR (1) KR101454469B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7783046B1 (en) 2007-05-23 2010-08-24 Elcomsoft Co. Ltd. Probabilistic cryptographic key identification with deterministic result
KR20100098094A (ko) * 2009-02-27 2010-09-06 한국전자통신연구원 그래픽 프로세서를 이용한 ms―office 파일로부터의 고속 패스워드 복구 시스템 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7783046B1 (en) 2007-05-23 2010-08-24 Elcomsoft Co. Ltd. Probabilistic cryptographic key identification with deterministic result
KR20100098094A (ko) * 2009-02-27 2010-09-06 한국전자통신연구원 그래픽 프로세서를 이용한 ms―office 파일로부터의 고속 패스워드 복구 시스템 및 방법

Also Published As

Publication number Publication date
KR20130085512A (ko) 2013-07-30

Similar Documents

Publication Publication Date Title
US9237014B2 (en) Partial CipherText updates using variable-length segments delineated by pattern matching and encrypted by fixed-length blocks
WO2018176733A1 (zh) 固件升级方法、终端和计算机可读非易失性存储介质
US9773118B1 (en) Data deduplication with encryption
US8442218B2 (en) Method and apparatus for compound hashing via iteration
US9607160B2 (en) Method and apparatus for providing string encryption and decryption in program files
US8175268B2 (en) Generating and securing archive keys
US8681976B2 (en) System and method for device dependent and rate limited key generation
AU2017341251B2 (en) Cipher message with authentication instruction
US20150134971A1 (en) Apparatus and method for decrypting encrypted file
US9979537B2 (en) Format-preserving cipher
US9762384B2 (en) Generation and verification of alternate data having specific format
CN112469036B (zh) 一种消息加解密方法、装置、移动终端和存储介质
US9313023B1 (en) Format-preserving cipher
US20110246768A1 (en) Systems and methods improving cryptosystems with biometrics
Unterluggauer et al. MEAS: Memory encryption and authentication secure against side-channel attacks
JP6142704B2 (ja) 秘匿データ照合装置、秘匿データ照合プログラムおよび秘匿データ照合方法
Park et al. Decrypting password-based encrypted backup data for Huawei smartphones
US7809130B1 (en) Password recovery system and method
US20220029818A1 (en) Message authentication code (mac) based compression and decompression
US11520708B2 (en) Memory system with an incremental hashing operation and method
JP6488954B2 (ja) 暗号データ処理方法、暗号データ処理システム、暗号データ処理装置および暗号データ処理プログラム
KR101454469B1 (ko) 암호화된 microsoft office 2007 파일에 대한 패스워드 검사 과정의 고속화 방법
CN108376212B (zh) 执行代码安全保护方法、装置及电子装置
US8144876B2 (en) Validating encrypted archive keys with MAC value
CN111291001A (zh) 计算机文件的读取方法、装置、计算机系统及存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170927

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181001

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190925

Year of fee payment: 6