KR101978384B1 - 웹 스토리지의 데이터 암호화 및 복호화 장치 및 방법 - Google Patents
웹 스토리지의 데이터 암호화 및 복호화 장치 및 방법 Download PDFInfo
- Publication number
- KR101978384B1 KR101978384B1 KR1020170003025A KR20170003025A KR101978384B1 KR 101978384 B1 KR101978384 B1 KR 101978384B1 KR 1020170003025 A KR1020170003025 A KR 1020170003025A KR 20170003025 A KR20170003025 A KR 20170003025A KR 101978384 B1 KR101978384 B1 KR 101978384B1
- Authority
- KR
- South Korea
- Prior art keywords
- data
- index
- key generation
- value
- generation factor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6209—Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bioethics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
본 발명은 웹 스토리지의 데이터 암호화 및 복호화 장치에 관한 것으로서, 상기 웹 스토리지의 데이터 암호화 및 복호화 장치는 웹 스토리지의 영구 저장소를 구비하고 있는 저장부, 그리고 상기 저장부에 연결되어 있고, 패스워드와 원본 데이터가 입력되면 랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 초기화 변수와 암호키 생성 인자를 생성하고, 입력된 패스워드와 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하고, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하고, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하고, 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 원본 데이터를 암호화하여 암호화된 데이터를 생성하며, 산출된 암호키 생성 인자 인덱스, 초기화 변수 인덱스 및 데이터 인덱스의 값에 의해 정해진 랜덤 데이터의 각 위치에서부터 각각 상기 암호키 생성 인자, 상기 초기화 변수 및 상기 암호화된 데이터를 위치를 암호화된 랜덤 데이터를 생성하여 상기 영구 저장소에 저장하는 동작 제어부를 포함한다.
Description
본 발명은 웹 스토리지의 데이터 암호화 장치 및 방법에 관한 것으로서, 좀 더 구체적으로 웹 스토리지의 영구 저장소에 저장되는 데이터의 암호화 장치 및 방법에 관한 것이다.
종래의 HTML에서는 멀티미디어(multi-media)나 공인인증서 같은 확장 기능들을 사용하기 위해 NPAPI(Netscape Plugin Application Programming Interface)나 액티브 X(ActiveX) 등의 비표준 플러그인(plug in) 기술을 사용했어야 했다.
이들 비표준 플러그인 기술은 특정 브라우저(browser)에 종속되는 기술로 현재까지 많은 보안 취약점들이 발견되었고, 이를 통한 바이러스(virus)나 악성코드를 전파하는 문제점을 야기했었다.
또한, 비표준 플러그인 기술은 해당 기능을 사용하기 위해서는 특정 브라우저를 통해서만 사용이 가능하며 스마트폰(smart phone)이나 태블릿 피씨(tablet PC)와 같은 새로운 형태의 사용자 단말에서는 사용이 불가능하다는 단점도 있다.
웹 기술 분야 국제 표준화 단체인 월드와이드인 컨소시엄(W3C)에서는 이와 같은 문제를 해결하기 위해 웹 프로그래밍 언어인 'HTML5'를 국제 웹 표준 언어로 채택하면서 기존에 웹 언어로 구현할 수 없었던 많은 기술들이 웹 표준으로 구현 가능하게 되었다.
이에 따라 기존에 비표준 플러그인 기술인 NPAPI와 액티브 X를 사용하여 구현되었던 기능들이 HTML5를 이용한 웹 표준 기술로 대체되고 있다.
액티브 X의 사용으로 가장 문제가 많았던 공인인증서 시스템 또한 HTML5를 이용하여 웹 표준 환경에서의 공인인증서 시스템을 구현하기 위한 움직임이 활발해지고 있다.
그러나 공인인증서 시스템의 경우 인증서와 개인키를 저장할 저장 공간이 필요하게 되는데, HTML5를 사용하여 웹 표준의 공인인증서 시스템을 구현할 때 인증서와 개인키는 웹 스토리지(web Storage)에 저장된다.
웹 스토리지는 HTML5의 새로운 기능 중 하나로 기존의 사용되었던 쿠키(cookie)를 대체하기 위해서 나온 기능이다.
웹 스토리지를 사용하면 쿠키보다 큰 용량의 데이터를 저장할 수 있으며, 데이터를 서버(server)로 전송하지 않아 트래픽(traffic)양을 줄일 수 있다는 장점이 있어 최근 은행이나 공공기관에서는 웹 스토리지를 이용한 서비스를 제공하고 있다.
그러나 웹 스토리지는 평문의 데이터를 아무런 보안 조치 없이 사용자 단말의 하드 디스크(hard disk)와 같은 저장부에 저장하기 때문에 개인정보와 같은 중요한 데이터를 저장하기에는 매우 부적합하다.
이러한 웹 스토리지는 데이터의 지속성과 유효범위에 따라 영구 저장소(local storage)와 임시 저장소(session storage)를 제공한다.
영구 저장소는 임의로 삭제하지 않는 이상 영구적으로 데이터의 저장이 가능하며, 동일한 도메인(domain) 내에서는 같은 저장소를 사용한다.
반면, 임시 저장소는 브라우저를 종료하면 저장되어 있던 데이터가 삭제되는 임시 저장을 하는 공간으로 같은 도메인이라도 세션(session)마다 별도의 저장소가 생성된다.
일반적으로 브라우저의 디버깅 모드(debugging mode)에서 영구 저장소와 임시 저장소에 저장되어 있는 데이터, 즉 웹스토리지에 저장되어 있는 데이터를 모두 확인할 수 있고, SQLite 파일 형식을 사용하는 브라우저는 SQLite Browser 프로그램을 통해 웹 스토리지 내부의 데이터를 확인할 수 있다
영구 저장소에 데이터를 저장할 경우, 영구 저장소에 저장된 데이터는 Key(키)-Value(값) 쌍 형태의 데이터로서 해당 사용자 단말의 저장부에 파일 형태로 저장된다.
이때, 저장부에 저장되는 데이터는 평문 그대로 저장되기 때문에 웹 브라우저의 디버깅 모드나 별도의 소프트웨어를 통해 쉽게 영구 저장소에 저장되어 있는 파일, 즉 데이터의 내용을 확인할 수 있다.
또한 파일 형식으로 저장된 데이터의 복사가 용이하고 비 인가된 사용자에 의해 변조 혹은 삭제 될 수 있으며 XSS(cross Site Scripting Vulnerability) 공격에 노출될 수 있다.
XSS는 게시판에 새 게시물을 작성하여 등록할 때와 같이 사용자의 입력을 받아 처리하는 웹 응용프로그램에서 입력 내용에 대해 실행 코드인 스크립트의 태그를 적절히 필터링하지 않을 경우에 악의적인 스크립트가 포함된 게시물을 등록할 수 있어 해당 게시물을 열람하는 일반 사용자의 사용자 단말로부터 개인정보와 같은 사용자 정보를 유출할 수 있는 공격이다.
자바 스크립트(JavaScript)를 이용하여 접근 및 제어가 가능한 영구 저장부는 스크립트 기반 공격이 가능하기 때문에 악성코드 등이 설치되어 있을 경우, XSS 공격 등을 통해 사용자의 민감한 정보가 공격자에게 노출되거나 전송될 수 있다.
따라서 본 발명이 이루고자 하는 기술적 과제는 웹 스토리지에 저장되는 데이터의 보안을 향상시키기 위한 것이다
본 발명의 한 특징에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치는 웹 스토리지의 영구 저장소를 구비하고 있는 저장부, 그리고 상기 저장부에 연결되어 있고, 패스워드와 원본 데이터가 입력되면 랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 초기화 변수와 암호키 생성 인자를 생성하고, 입력된 패스워드와 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하고, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하고, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하고, 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 원본 데이터를 암호화하여 암호화된 데이터를 생성하며, 산출된 암호키 생성 인자 인덱스, 초기화 변수 인덱스 및 데이터 인덱스의 값에 의해 정해진 랜덤 데이터의 각 위치에서부터 각각 상기 암호키 생성 인자, 상기 초기화 변수 및 상기 암호화된 데이터를 위치를 암호화된 랜덤 데이터를 생성하여 상기 영구 저장소에 저장하는 동작 제어부를 포함한다.
상기 동작 제어부는 상기 저장부의 상기 영구 저장소에서 암호화된 랜덤 데이터를 읽어와 입력된 패스워드와 암호화된 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하고, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하고, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하고, 산출된 암호키 생성 인자 인덱스, 상기 초기화 변수 인덱스 및 상기 데이터 인덱스를 이용하여 상기 암호화된 랜덤 데이터에서 암호키 생성 인자, 초기화 변수 및 암호화된 데이터를 읽어오고, 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 암호화된 데이터를 복호화하여 원본 데이터를 생성하는 것이 좋다.
상기 랜덤 데이터는 상기 영구 저장소에 저장되어 있거나 랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 생성될 수 있다.
상기 암호화 유닛은 패스워드와 랜덤 데이터 또는 암호화된 랜덤 데이터의 첫 번째 행의 16바이트 데이터를 더한 후, 더한 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더하여 상기 암호키 생성 인자 인덱스를 생성하는 것이 좋다.
상기 암호화 유닛은 상기 암호키 생성 인자 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 암호키 생성 인자 인덱스를 더하여 상기 초기화 변수 인덱스를 생성하는 것이 바람직하다.
상기 암호화 유닛은 상기 초기화 변수 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 초기화 변수 인덱스를 더하여 상기 데이터 인덱스를 생성하는 것이 좋다.
본 발명의 다른 특징에 따른 웹 스토리지의 데이터 암호화 및 복호화 방법은 랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 초기화 변수와 암호키 생성 인자를 생성하는 단계, 패스워드와 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하는 단계, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하는 단계, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하는 단계, 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 원본 데이터를 암호화하여 암호화된 데이터를 생성하는 단계, 그리고 산출된 암호키 생성 인자 인덱스, 초기화 변수 인덱스 및 데이터 인덱스의 값에 의해 정해진 랜덤 데이터의 각 위치에서부터 각각 상기 암호키 생성 인자, 상기 초기화 변수 및 상기 암호화된 데이터를 위치를 암호화된 랜덤 데이터를 생성하는 단계를 포함한다.
상기 특징에 따른 따른 웹 스토리지의 데이터 암호화 및 복호화 방법은 패스워드와 암호화된 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하는 단계, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하는 단계, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하는 단계, 산출된 암호키 생성 인자 인덱스, 상기 초기화 변수 인덱스 및 상기 데이터 인덱스를 이용하여 상기 암호화된 랜덤 데이터에서 암호키 생성 인자, 초기화 변수 및 암호화된 데이터를 읽어오는 단계, 그리고 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 암호화된 데이터를 복호화하여 원본 데이터를 생성하는 단계를 더 포함할 수 있다.
상기 랜덤 데이터는 영구 저장소에 저장되어 있거나 랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 생성되는 것이 좋다.
상기 암호키 생성 인자 인덱스 생성 단계는 패스워드와 랜덤 데이터 또는 암호화된 랜덤 데이터의 첫 번째 행의 16바이트 데이터를 더한 후, 더한 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더하여 상기 암호키 생성 인자 인덱스를 생성하는 것이 좋다.
상기 초기화 변수 인덱스 생성 단계는 상기 암호키 생성 인자 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 암호키 생성 인자 인덱스를 더하여 상기 초기화 변수 인덱스를 생성하는 것이 좋다.
상기 데이터 인덱스 생성 단계는 상기 초기화 변수 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 초기화 변수 인덱스를 더하여 상기 데이터 인덱스를 생성하는 것이 좋다.
이러한 특징에 따르면, 웹 스토리지의 영구 저장소에 데이터를 저장할 때, 랜덤 데이터를 생성한 후 산출된 위치에 저장하고자 하는 데이터를 암호화시켜 숨겨 놓게 된다. 따라서, 정확하게 데이터가 숨겨져 있는 위치를 알 수 없으므로 원하지 않게 랜덤 데이터가 유출되더라고 데이터의 추출 어려워져 데이터 보안성이 향상된다.
도 1은 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치의 개략적인 블럭도이다.
도 2는 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치의 암호화 동작에 대한 동작 순서도이다.
도 3은 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치의 복호화 동작에 대한 동작 순서도이다.
도 4는 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치에서 생성된 랜덤 데이터의 한 예를 도시한 도면이다.
도 5는 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치에서 데이터가 은닉되기 전의 랜덤 데이터와 데이터가 은닉된 랜덤 데이터의 한 예를 도시한 도면이다.
도 2는 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치의 암호화 동작에 대한 동작 순서도이다.
도 3은 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치의 복호화 동작에 대한 동작 순서도이다.
도 4는 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치에서 생성된 랜덤 데이터의 한 예를 도시한 도면이다.
도 5는 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치에서 데이터가 은닉되기 전의 랜덤 데이터와 데이터가 은닉된 랜덤 데이터의 한 예를 도시한 도면이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
어떤 구성요소가 다른 구성요소에 "접속되어" 있다거나 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 접속되어 있거나 연결되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 한다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 접속되어" 있다거나 "직접 연결되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
그러면 첨부한 도면을 참고로 하여 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치 및 방법에 대하여 설명한다.
먼저, 도 1을 참고로 하여 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치에 대하여 상세하게 설명한다.
도 1에 도시한 본 발명의 한 실시예에 따른 웹 스토리지의 데이터 암호화 및 복호화 장치는 사용자 입력부(10), 사용자 입력부(10)에 연결된 동작 제어부(20), 동작 제어부(20)에 연결된 난수 발생부(30), 동작 제어부(20)에 연결된 저장부(40), 그리고 동작 제어부(20)에 연결된 출력부(50)를 구비한다.
사용자 입력부(10)는 동작 제어를 위한 명령이나 데이터 등의 입력 동작에 관련된 신호를 발생시켜 동작 제어부(20)로 출력한다.
이러한 사용자 입력부(10)는 키 패드(key pad), 돔 스위치 (dome switch), 터치 패드(touch pad), 조그(jog) 스위치 또는 마우스(mouse) 등으로 구성될 수 있다.
동작 제어부(20)는 웹 스토리지의 데이터 암호화 및 복호화 장치의 전반적인 동작을 제어하는 것으로서, 데이터의 암호화 동작을 제어하는 암호화 유닛(21)과 암호화된 데이터의 복호화 동작을 제어하는 복호화 유닛(22)을 구비한다.
따라서, 동작 제어부(20)의 암호화 유닛(21)은 원본 데이터를 1차적으로 암호화하여 암호화된 데이터를 생성하고, 정해진 크기의 랜덤한 데이터를 이용하여 산출된 위치에 암호화된 데이터를 숨기는 방식으로 원본 데이터의 암호화를 실시한다.
복호화의 동작은 암호화 동작을 반대로 수행하면 되므로, 동작 제어부의 복호화 유닛(22)은 암호화된 데이터가 숨겨진 위치를 산출한 후, 산출된 위치에 숨겨진 암호화된 데이터를 읽어온 후, 암호화 데이터를 암호화한 알고리즘을 이용해 복호화하여 원본 데이터를 추출한다.
난수 발생부(30)는 동작 제어부(20)의 동작에 따라 정해진 크기의 난수를 발생시켜 동작 제어부(20)로 인가한다. 이때, 동작 제어부(30)는 웹 암호화 API[web cryptography API(application programming interface)]에서 제공하는 getRandomValues() 메소드(method)를 이용하여 원하는 크기의 난수를 획득할 수 있다.
getRandomValues()는 랜덤한 난수 값을 생성하도록 하는 메소드이다.
저장부(40)는 웹 스토리지가 형성되어 있고, 동작 제어부(20)의 암호화 유닛(21)에 의해 암호화 데이터가 저장된다.
출력부(50)는 동작 제어부(20)의 제어에 따라 동작하여 동작 제어부(20)에서 출력되는 데이터를 출력하는 것으로, 출력되는 데이터를 영상으로 출력하는 액정 표시 장치나 유기 발광 표시 장치와 같은 표시 장치를 구비할 수 있다.
이러한 구조를 갖는 웹 스토리지의 데이터 암호화 및 복호화 장치의 동작에 대하여 설명한다.
웹 스토리지의 데이터 암호화 및 복호화 장치의 동작에 필요한 전원이 공급되어 웹 스토리지 데이터 암호화 및 복호화 장치가 동작되면, 동작 제어부(20)의 동작 역시 시작된다.
따라서, 사용자는 사용자 입력부(10)를 이용하여 데이터를 암호화할지 또는 복호화할지를 선택하게 되고, 사용자 선택에 해당하는 신호가 사용자 입력부(10)를 통해 동작 제어부(20)로 인가되면 동작 제어부(20)는 사용자의 선택 결과에 따라 암호화 유닛(20)이나 복호화 유닛(22)을 동작시켜 사용자의 선택 동작을 제어하게 된다.
먼저, 도 2를 참고로 하여, 동작 제어부(20)의 암호화 유닛(21)에 의해 행해지는 데이터의 암호화 동작을 설명한다.
동작 제어부(20)의 제어에 따라 동작 제어부(20)의 제어 상태가 암호화 루틴으로 넘어가면 암호화 유닛(21)은 사용자 입력부(10)를 통해 입력되는 암호화할 데이터인 원본 데이터와 패스워드(password)를 판독하여 저장부(40)에 저장한다(S11).
이때, 암호화될 데이터는 문자, 기호 및 숫자 중 적어도 하나로 이루어지며, 아스키 코드(ASCII code)로 변환되어 저장부(40)에 저장된다.
패스워드 역시 문자, 기호 및 숫자 중 적어도 하나로 이루어지고, 아스키 코드(ASCII code)로 변환되어 저장부(40)에 저장된다.
다음, 암호화 유닛(21)은 저장부(40)의 웹 스토리지의 영구 저장소 내에 랜덤 데이터(random data)가 존재하는지 판단한다(S12).
영구 저장소 내에 저장되는 랜덤 데이터는 키(key)-값(value) 쌍(즉, 키값)의 형태로 저장되고, 랜덤 데이터는 정해진 설정키값(rnddata)을 갖고 있다.
따라서, 암호화 유닛(21)은 영구 저장소 내에 저장된 데이터의 키값과 설정키값을 비교하여 설정키값과 동일한 키값을 갖는 데이터를 랜덤 데이터로 판정하고, 설정키값과 동일한 키값을 갖는 데이터가 존재하지 않으면 영구 저장소에 랜덤 데이터가 존재하지 않는 상태로 판정한다.
따라서, 저장부(40)의 웹 스토리지에 랜덤 데이터가 존재하지 않는 경우, 암호화 유닛(21)은 웹 암호화 API의 getRandomValues()를 이용해 난수 발생부(30)를 동작시켜 해당 크기의 랜덤 데이터를 생성한 후 저장부(40)에 파일 형태로 저장한다(S13).
저장할 데이터의 길이에 따라 암호문의 길이가 달라지기 때문에, 랜덤 데이터의 길이는 저장되는 암호문의 길이에 따라 정해질 수 있습니다. 암호문의 길이를 제외한 랜덤 데이터의 최소 길이는 861개이므로, 랜덤 데이터는 861개 이상이면 된다.
도 4에 생성된 랜덤 데이터(A)의 한 예를 도시한다. 도 4에 도시한 것처럼, 랜덤 데이터는 10진수로 이루어져 있다. 도 4에서, 랜덤 데이터(A)의 오른쪽 편에 위치한 'B'부분은 랜덤 데이터(A)를 아스키 코드로 변환해 도시한 부분이다.
그런 다음, 암호화 유닛(21)는 웹 암호화 API의 getRandomValues()를 이용해 난수 발생부(30)를 동작시켜 해당 크기의 초기화 벡터(IV)와 암호키 생성인자(salt)를 생성하여 저장부(40)에 저장한다(S14).
초기화 벡터(IV)는 AES-CBC 암호화 알고리즘의 CBC 모드를 사용할 때 이용되는 초기화 벡터이고, 암호키 생성 인자(salt)는 해시 함수인 SHA-256를 이용하여 암호키를 생성할 수 사용되는 숫자이다.
이들 초기화 벡터(IV)와 암호키 생성 인자(salt)는 모두 16바이트(byte)의 크기를 갖는 숫자이다.
이처럼, 난수 발생부(30)를 이용하여 랜덤 데이터, 초기화 벡터(IV) 및 암호키 생성 인자(salt)가 생성되면, 암호화 유닛(21)은 패스워드와 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스(index)인 salt 인덱스(index)를 산출하여 저장부(40)에 저장한다(S15).
salt 인덱스는 생성된 암호키 생성 인자(salt)를 랜덤 데이터 내에 숨기기 위한 숨김 시작 위치를 나타내는 숫자이다.
이러한 salt 인덱스를 산출하기 위한 개념적인 산출 방식은 다음과 같다.
- 제1 해시값=sha256(패스워드+랜덤 데이터의 첫 번째 행의 16바이트 데이터)
-salt 인덱스=(제1 해시값의 XOR 연산값)+(32(설정 숫자)에 해당하는 16바이트의 숫자)(=123456…FF+16바이트, 여기서, 12는 총 16바이트의 제1 해시값 중에서 첫 번째 1바이트의 숫자를 의미하고, 34는 총 16바이트의 제1 해시값 중에서 두 번째 1바이트의 숫자를 의미하며, 56는 총 16바이트의 제1 해시값 중에서 세 번째 1바이트의 숫자를 의미하고, FF는 총 16바이트의 제1 해시값 중에서 16번째 1바이트의 숫자를 의미한다. (= ^)는 XOR 연산을 의미한다).
이러한 salt 인덱스를 산출하기 위해, 먼저, 암호화 유닛(21)은 저장부(40)에 저장되어 있는 패스워드와 생성된 랜덤 데이터의 처음에 위치하는 16바이트의 데이터(도 4에서, 맨 좌측에 00000670이라고 기재된 첫 번째 행에 기재되어 있는 숫자들)를 더해 연산값을 산출한다.
이때, 산출된 연산값은 2byte 크기의 16진수 값이며, 이러한 16진수 값은 10진수로 변경되어 salt 인덱스로 사용된다.
도 4의 예에서 패스워드에 더해지는 랜덤 데이터의 16바이트의 값은 '00 00 00 00 82 12 03 04 29 84 0C 65 00 6E 00 63'이 되고, 이 랜덤 데이터의 값에서 첫 번째로 존재하는 1byte는 '00'이 되고 16번째 존재하는 1바이트는 '63'이 된다.
그런 다음, 산출된 연산값을 해쉬 함수인 SHA-256의 인자로 사용하여 연산값에 SHA-256(sha256)를 적용해 해시값(제1 해시값)을 산출하고, 산출된 제1 해시값을 1바이트씩 XOR 연산한 후 XOR 연산된 값(2바이트)에 설정 숫자인 32에 해당하는 16바이트의 값을 더하여 slat 인덱스를 산출한다.
이때, 제1 해시값을 XOR 연산할 때, 첫 번째 1바이트를 XOR 연산하여 제1 XOR값을 생성하고, 제1 XOR값과 두 번째 1바이트의 값을 XOR 연산하여 제2 XOR값을 생성하고, 제2 XOR값과 세 번째 1바이트의 값을 XOR 연산하여 제3 XOR값을 생성하는 것처럼, 바로 이전 번째에서 생성된 XOR값과 현재 번째 1바이트의 값을 연산하는 것을 반복하여 15번째 생성된 XOR값과 마지막 16번째 1바이트의 값을 연산하여 최종적으로 XOR 연산된 2바이트의 XOR 연산값이 얻어진다. 이러한 과정을 통해 XOR 연산값은 최소 0부터 최대 255의 값을 가진다.
산출한 해시값을 1바이트씩 이동시키면서 XOR 연산을 실시하는 과정을 아래에 예를 들어 기재한다.
즉, 해시 함수를 적용한 해시값을 '642a9d3d882d'라고 하고, 이 해시값을 순차적으로 XOR 연산하는 과정은 설명한다.
먼저, '64'에 해당하는 이진수 값은 '01100100'이고 '2a'에 해당하는 이진수 값은 '00101010'이므로, 64와 2a의 XOR 연산하면 01100100(=64) 00101010(=2a)=01001110(=4E)가 된다,
두 번째로, 01001110(=4E)과 '2a' 다음에 위치한 '9c를 XOR 하게 되고, 이때의 연산값은 01001110(=4E)10011101(=9d) =11010011(=d3)이다.
세 번째, 11010011(=d3)과 '9c' 다음에 위치한 '3d를 XOR 하게 되며, 이때의 연산값은 11010011(=d3)00111101(=3d)=11101110(=EE)이 된다.
다시, 바로 전 단계의 연산값인 11101110(=EE)와 '3d' 다음에 위치한 '88'를 XOR 연산해야 하며, 이때의 연산값은 11101110(=EE) 100010000(=88)=01100110(=66)가 된다.
마지막으로, 바로 이전 단계의 연산값인 01100110(=66)와 '88'다음에 위치한 '2d'를 XOR하면, 01100110(=66)00101101(=2d)=01001011(=4B)가 된다.
결국, 본 예의 방식에 따라 해시값인 '642a9d3d882d'를 순차적으로 1바이트식 XOR 연산하게 되면(642a9d3d882d), 4B(16진수)[=75(10진수)]가 얻어진다.
이러한 방식으로 통해 해당 해시값은1바이트씩 XOR 연산하기 때문에 최대로 나올 수 있는 결과값은 FF이다.
이처럼, salt 인덱스의 값이 산출되며, 다시 암호화 유닛(21)은 산출된 salt 인덱스의 값을 이용하여 초기화 변수(IV) 인덱스인 IV 인덱스를 산출한다(S16).
IV 인덱스는 생성된 초기화 변수(IV)를 랜덤 데이터 내에 숨기기 위한 숨김 시작 위치를 나타내는 숫자이다.
즉, 암호화 유닛(21)은 산출된 salt 인덱스의 값을 해시함수인 SHA-256(sha256)의 인자로 사용해 해시값(제2 해시값)을 산출하고, salt 인덱스의 값은 산출한 방식과 동일한 방식으로, 산출된 제2 해시값을 1바이트씩 XOR 연산한 후 XOR 연산된 값(2바이트)에 설정 숫자인 32에 해당하는 16바이트의 값을 더하고 다시 slat 인덱스를 더하여 최종적으로 IV 인덱스의 값을 산출한다.
XOR 연산하는 방식은 salt 인덱스의 산출하는 경우와 동일하다.
이러한 IV 인덱스에 대한 개념적인 산출 방식은 다음과 같다.
- 제2 해시값= sha256(slat 인덱스)
- IV 인덱스=제2 해시값의 XOR 연산+32에 해당하는 16바이트+slat 인덱스(=123456…FF+16바이트+slat 인덱스, 여기서, 12, 34, 56, FF는 각각 salt 인덱스의 값에 sha256의 해시함수를 적용할 때 산출된 16바이트의 제2 해시값 중 해당 번째에 해당한 1바이트의 숫자이다).
이 때, IV 인덱스를 위해 16바이트의 데이터가 더해지는 이유는 제2 해시값을 XOR 연산하여 산출된 데이터의 길이를 salt 인덱스의 길이와 동일하게 맞추기 위한 것이다.
이처럼, IV 인덱스가 산출되면, 암호화 유닛(21)은 산출된 IV 인덱스를 이용하여 다시 데이터 인덱스를 산출한다(S17).
데이터 인덱스는 암호화된 데이터를 랜덤 데이터 내에 숨기기 위한 숨김 시작 위치를 나타내는 숫자이다.
IV 인덱스 산출 방식과 유사하게, 암호화 유닛(21)은 산출된 IV 인덱스의 값을 해시함수인 SHA-256(sha256)의 인자로 사용해 해시값(제3 해시값)을 산출하고, 산출된 제3 해시값을 1바이트씩 XOR 연산한 후 XOR 연산된 값(2바이트)에 32에 해당하는 16바이트의 값을 더하고 다시 IV 인덱스를 더하여 최종적으로 데이터 인덱스의 값을 산출한다(S17).
XOR 연산하는 방식은 salt 인덱스의 산출하는 경우와 동일하다.
이러한 데이터 인덱스에 대한 개념적인 산출 방식은 다음과 같다.
- 제3 해시값=sha256(IV 인덱스)
-데이터 인덱스=제3 해시값의 XOR 연산+32에 해당하는 16바이트+IV 인덱스(=123456…FF+16바이트+IV 인덱스, 여기서, 12, 34, 56, FF는 각각 각각 IV 인덱스의 값에 sha256의 해시함수를 적용할 때 산출된 16바이트의 해시값 중 해당 번째에 해당한 1바이트의 숫자이다).
이때, 각 산출된 salt 인덱스, IV 인덱스, 데이터 인덱스는 10진수이다.
역시, 데이터 인덱스를 위해 16바이트의 데이터가 더해지는 이유는 제2 해시값을 XOR 연산하여 산출된 데이터의 길이를 IV 인덱스의 길이와 동일하게 맞추기 위한 것이다.
이러한 IV 인덱스, salt 인덱스 및 데이터 인덱스를 각각 산출하는 코드는 다음과 같다. 아래의 코드에서, SALT_idx는 salt 인덱스를 의미하고, IV_idx는 IV 인덱스를 의미하며, EncData_idx는 데이터 인덱스를 의미한다.
function index(buffer)
{
var idx = 0;
for(i=0; i<buffer.length; i+=2){
var num = parseInt(buffer.substr(i, 2), 16);
idx ^= num;
}
return idx;
}
function INDEX()
{
var passwd = document.querySelector('#passwd');
var array = [];
var buffer;
if(BG == null){
BG = window.localStorage['BG'];
array = BG;
}
else
{
array = BG;
}
buffer = array.substr(0,32); //파일앞16byte
sha256(passwd.value+buffer).then(function(Salt) //SALT_idx
{
this.SALT_idx = index(Salt)+32;
return sha256(SALT).then(function(Iv) //IV_idx
{
this.IV_idx = index(Iv)+SALT_idx+32;
return sha256(IV).then(function(Enc) //EncData_idx
{
this.ENC_idx = index(Enc)+IV_idx+32;
});
});
});
}
다음, 암호화 유닛(21)은 저장부(40)에 저장되어 있는 암호키 생성인자(salt)와 패스워드를 이용하여 암호키를 생성한다(S18).
암호화 유닛(21)은 암호키 생성 인자(salt)와 패스워드에 해시함수인SHA-256(sha256)를 적용하여 산출된 값인 해시값을 암호키로 사용한다. 즉, 암호키 생성 인자(salt)와 패스워드를 합친 데이터를 SHA-256 함수를 적용하여 생성됩니다.
예를 들어, 패스워드가 'passwd'이고, 암호키 생성인자(salt)가 'd16842a5135bdc1542f543fd8f214325d'이면, 이들 패스워드와 암호키 생성인자(salt)를 합치면 'passwdd16842a5135bdc1542f543fd8f214325d'와 같은 데이터가 생성되고, 이 합친 데이터('passwdd16842a5135bdc1542f543fd8f214325d')에 sha256 해시하여 산출된 해시값이 암호키가 됩니다.
다음, 암호화 유닛(21)은 생성된 암호키와 암호화 알고리즘을 이용하여 저장부(40)에 저장되어 있는 원본 데이터를 1차적으로 암호화하여 암호화된 데이터를 생성하여 저장부(40)에 임시 저장한다(S19).
이때, 암호화된 데이터를 생성하기 위한 암호화 알고리즘은 웹 암호화 API에서 제공되는 알고리즘 중에서 암호화에 관련된 알고리즘을 사용한다.
웹 암호화 API에서 제공되는 알고리즘의 예는 RSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, ECDSA, ECDH, AES-CTR, AES-CBC, AES-CMAC, AES-GCM, AES-CFB, AES-KW, HMAC, DH, SHA-1, SHA-256, SHA-384, SHA-512, CONCAT, HKDF-CTR 및 PBKDF2이다.
본 예의 경우, 암호화 유닛(21)은 AES-CBC 알고리즘을 이용하여 초기화 변수(IV)와 암호키를 이용하여 원본 데이터를 암호화한 암호화된 데이터를 생성한다.
이렇게 암호화된 데이터가 생성되면, 암호화 유닛(21)은 생성된 암호화된 데이터의 길이를 계산해, 저장부(40)에 저장해 놓는다. 하지만 대안적인 예에서, 암호화된 데이터의 길이를 설정값으로 가질 수 있고, 이 경우, 설정값은 저장부(40)에 저장되어 있다.
원본 데이터를 1차적으로 암호화시켜 암호화된 데이터가 생성되면, 암호화 유닛(21)은 설정키값을 이용하여 저장부(40)의 웹 스토리지의 영구 저장소에 저장되어 있는 랜덤 데이터를 읽어온 후, 산출된 IV 인덱스, salt 인덱스 및 데이터 인덱스의 값을 이용하여 각각 초기화 변수(IV), 암호키 생성 인자(salt), 암호화된 데이터를 랜덤 데이터의 해당 위치에 위치시켜, 랜덤 데이터의 해당 위치에 초기화 변수(IV), 암호키 생성 인자(salt) 및 암호화된 데이터가 숨겨져 있는 암호화된 랜덤 데이터를 생성하여 웹 스토리지의 영구 저장소에 저장한다(S110).
이때, 암호화된 랜덤 데이터는 설정된 설정키값(rnddata)을 갖게 영구 저장수에 저장된다.
랜덤 데이터에 서로 쌍을 이루어져 기재되어 있는 2개의 숫자는 1바이트의 크기를 갖고 있으므로 각각의 숫자는 8비트(bit)의 크기를 갖게 된다.
또한, 각 숫자의 위치가 인덱스의 값을 의미한다.
예를 들어, 도 4에서, 첫 번째 줄의 맨 처음 위치하는 한 쌍의 숫자인 '00'에서 앞에 위치하는 '0'이 위치하는 곳의 인덱스는 '0' 이 되고, 뒤에 위치하는 인덱스의 '0'이 위치하는 곳의 인덱스는 '1'가 된다.
또한, 도 4에서, 첫 번째 줄의 마지막에 위치하는 한 쌍의 숫자인 '63'에서 '6'이 위치하는 곳의 인덱스는 30이고, '3'이 위치하는 곳의 인덱스는 31가 된다.
도 4의 두 번째 줄의 맨 처음 위치하는 한 쌍의 숫자인 '00'에는 앞에 위치하는 '0'이 위치하는 곳의 인덱스는 '32' 이 되고, 뒤에 위치하는 인덱스의 '0'이 위치하는 곳의 인덱스는 '33'가 된다.
이와 같이, 랜덤 데이터에서 첫 번째 줄의 처음에 위치하는 숫자에서부터 마지막 줄의 마지막에 위치하는 숫자의 인덱스는 0에서부터 순차적으로 증가하는 값을 갖는다. 이때, 인덱스는 좌측에서 우측 방향으로 증가하며 또한 위쪽에서 아래쪽 방향으로 증가하게 된다.
이미 설명한 것처럼, 각 인덱스는 해당 정보(IV, salt, 암호화된 데이터)의 숨김 시작 위치에 되므로, 각 인덱스에 해당하는 위치에서부터 각 해당 정보를 인덱스가 증가하는 방향으로 랜덤 데이터에 위치시켜, 랜덤 데이터 속에 초기화 변수(IV), 암호키 생성 인자(salt) 및 암호화된 데이터를 숨기게 된다.
예를 들어, IV 인덱스가 31인 경우, 도 4의 랜덤 데이터에서 첫 번째 줄에 위치하는 숫자들(00 00 00 82, 12 93 04 29 84 0C 65 00 6E 00 63) 중에서 마지막에 위치한 숫자(3)가 위치하는 곳이 인덱스 31에 해당된다.
따라서, 마지막에 위치한 숫자 3이 위치하는 곳에서부터 초기화 변수(IV)가위치하게 되고, 이때, 초기화 변수의 길이 즉, 크기는 16바이트를 갖고 있으므로, 랜덤 데이터에서 초기화 변수(IV)가 위치할 장소는 첫 번째 줄의 마지막 숫자가 위치하는 곳에서부터 두 번째 줄의 마지막 바로 앞에 위치한 곳까지가 된다.
즉, 도 4의 첫 번째 줄의 숫자는 00 00 00 82 12 93 04 29 84 0C 65 00 6E 00 63이고, 도 4의 두 번째 줄의 숫자는 00 44 00 61 74 00 61 00 66 00 39 00 31 00 66이므로, 이 중에서 굵게 표시된 부분이 16바이트의 초기화 변수(IV)가 위치하는 장소가 된다.
이러한 방식에 따라 암호키 생성 인자(salt)와 암호화된 데이터 역시 해당 인덱스의 값에 의해 정해진 위치에서부터 해당 크기만큼 해당하는 랜덤 데이터의 부분에 숨겨지게 되어, 이들 정보(IV, salt, 암호화된 데이터)가 숨겨진 부분에 있던 초기의 값들은 숨겨지는 정보의 값으로 대체된다.
그런 다음, 암호화 유닛(21)은 암호화된 랜덤 데이터, 해당 위치에 초기화 변수(IV), 암호키 생성 인자(salt) 및 암호화된 데이터가 숨겨진 랜덤 데이터를 저장부(40)의 웹 스토리지의 영구 저장소의 저장 공간에 파일 형태로 저장한다.
이처럼, 사용자가 웹 스토리지의 영구 저장소에 원본 데이터를 저장할 때, 패스워드를 입력한 후 암호화 동작을 선택하며, 무작위로 생성된 랜덤 데이터 내에 1차적으로 암호화된 데이터가 숨겨져 웹 스토리지에 저장되게 된다.
따라서, 사용자의 의사와 무관하게 웹 스토리지에 저장되어 있는 암호화된 랜덤 데이터가 유출되더라고 암호화된 랜덤 데이터의 형태와 동일한 형태인 10진법으로 암호화된 데이터가 숨겨져 있으므로, 암호화된 랜덤 데이터 중에서 어느 부분이 진짜 암호화된 데이터에 해당하는 부분인지를 용이하게 알 수 없다.
또한, 사용자가 원하는 데이터를 1차적으로 암호화를 실시하여 저장하므로, 암호화된 랜덤 데이터 내에서 데이터를 추출하기에는 어려움이 발생한다.
도 2의 단계(S12)에서 이미 웹 스토리지의 영구 저장소에 이미 랜덤 데이터가 존재하면, 암호화 유닛(21)은 별도로 랜덤 데이터를 생성하지 않고 단계(S15)로 넘어가 이용하여 랜덤 데이터, 초기화 벡터(IV) 및 암호키 생성 인자(salt)를 이용하여 salt 인덱스(index)를 산출하여 저장부(40)에 저장한다.
즉, 단계(S15-S17)를 참고로 하여 설명한 것처럼, 사용자 입력부(10)를 통해 입력된 패스워드와 웹 스토리지에 존재하는 램덤 데이터의 첫 번째 행의 16 바이트 데이터를 합친 후, 합친 데이터를 해시 함수인 sha256 적용해 해시 처리하여 제1 해시값을 산출하고,
산출된 제1 해시값의 XOR 연산한 값과 설정 숫자(예, 32)에 해당하는 16 바이트를 더하여, salt 인덱스를 산출하고, 산출된 slat 인덱스를 sha256으로 해시 처리하여 제2 해시값은 산출하고 산출된 제2 해시값을 이미 설명한 것과 같은 방식으로 처리하여 IV 인덱스를 산출하며, 다시 IV 인덱스를 이용하여 데이터 인덱스를 산출하게 된다.
도 5에 데이터가 은닉 전인 랜덤 데이터와 데이터가 은닉된 랜덤 데이터를 한 예로서 도시한다.
도 5에서 salt는 '7258ba7e0b466de7ed4d0fcb73ecdb35'이고 IV는 '6144a5a289180b6790c98eec4a68715e'이며, 이때의 salt 인덱스는 200이고, V 인덱스는 348이며, 암호문 인덱스는 624이다.
다음, 도 3을 이용하여, 웹 스토리지의 영구 저장소에 저장되어 있는 암호화된 랜덤 데이터 내에 숨겨져 있는 데이터, 즉 사용자 입력부(10)를 통해 입력된 암호화될 데이터를 추출하는 복호화 방법에 대하여 설명한다.
사용자 입력부(10)를 이용하여 복호화 동작이 선택되면, 동작 제어부(20)는 복호화 유닛(22)을 동작시켜 사용자가 원하는 데이터의 복호화 동작이 이루어질 수 있도록 한다.
즉, 도 3에 도시한 것처럼, 복호화 유닛(22)의 동작에 의해 동작 제어부(20)의 동작이 복호화 루틴으로 넘어가면, 복호화 유닛(22)은 사용자 입력부(10)로 입력되는 신호를 이용하여 사용자에 의해 입력된 패스워드를 판독해 저장부(40)에 저장한다(S21).
다음, 복호화 유닛(22)은 이미 설명한 것처럼 설정키값과 동일한 키값을 갖는 데이터가 웹 스토리지의 영구 저장소에 저장되어 있는 암호화된 랜덤 데이터를 읽어온다(S22).
그런 다음, 복호화 유닛(22)은, 암호화 동작 시와 동일한 방식으로, 입력된 패스워드와 읽어온 암호화된 랜덤 데이터를 이용하여 salt 인덱스를 산출하여 저장하고(S23), 산출된 salt 인덱스를 이용하여 IV 인덱스를 산출한 후(S24), 다시 IV 인덱스를 이용하여 데이터 인덱스를 산출해 저장부(40)에 저장한다.
이미 설명한 것처럼, 이들 인덱스를 산출하는 방식은 랜덤 데이터를 이용하는 대신 암호화된 랜덤 데이터를 이용한다는 것을 제외하면 도 3의 단계 S15 내지 S17에 대한 방식과 동일하므로, 자세한 설명은 생략한다.
이처럼, salt 인덱스, IV 인덱스 및 데이터 인덱스가 각각 산출되면, 복호화 유닛(22)은 암호화된 랜덤 데이터에서 산출된 해당 인덱스의 값에 해당하는 위치에서부터 각각 해당하는 크기(예, 16바이트)만큼의 숫자를 읽어와 이들을 각각 암호키 생성 인자(salt), 초기화 변수(IV) 및 암호화된 데이터로서 저장부(40)에 저장한다(S26).
예를 들어, 산출된 IV 인덱스가 30이고, IV 인덱스의 크기가 16바이트라는 것이 저장부(40)에 저장되어 있으면, 복호화 유닛(22)은 암호화된 랜덤 데이터의 첫 번째 줄의 숫자의 마지막에 위치한 숫자부터 두 번째 줄의 마지막 바로 앞에 위치한 숫자를 읽어와 이를 초기화 변수(IV)로 저장하게 된다.
또한, 암호화된 데이터의 크기 역시 저장부(40)에 저장되어 있으므로, 복호화 유닛(22)은 저장부(20)에 저장된 암호화된 데이터의 크기(즉, 길이)를 이용하여 데이터 인덱스에 의해 정해진 위치에서부터 정해진 길이만큼의 랜덤 데이터를 읽어와 이를 암호화된 데이터로 저장하게 된다.
그런 다음, 도 2을 참고로 하여 이미 설명한 것과 동일한 방식으로 암호키생성 인자(salt)와 패스워드를 이용하여 암호키를 생성한 후(S27), 복호화 유닛(22)은 생성된 암호키와 원본 데이터를 암호화할 때 사용된 암호화 알고리즘(예, AES_CBC 암호화 알고리즘)을 이용해 암호화된 데이터를 복호화하여 원본 데이터를 추출한 후 저장부(40)에 저장한다.
이때, 암호화 알고리즘의 종류는 이미 프로그래머 등에 의해 디폴드(default) 값으로 복호화 유닛(22)의 제어 프로그램 내에 정해져 있다.
따라서, 사용자 입력부(10)를 이용하여 저장부(40)에 저장되어 있는 원본 데이터를 출력부(50)로 출력하여 원본 데이터를 확인할 수 있다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.
10: 사용자 입력부 20: 동작 제어부
21: 암호화 유닛 22: 복호화 유닛
30: 난수 발생부 40: 저장부
21: 암호화 유닛 22: 복호화 유닛
30: 난수 발생부 40: 저장부
Claims (12)
- 웹 스토리지의 영구 저장소를 구비하고 있는 저장부, 그리고
상기 저장부에 연결되어 있으며, 상기 영구 저장소에 랜덤 데이터가 존재하는지를 판단하고, 상기 랜덤 데이터가 존재하지 않으면 상기 랜덤 데이터를 생성하고 패스워드와 원본 데이터가 입력되면 랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 초기화 변수와 암호키 생성 인자를 생성하고, 입력된 패스워드와 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하고, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하고, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하고, 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 원본 데이터를 암호화하여 암호화된 데이터를 생성하며, 산출된 암호키 생성 인자 인덱스, 초기화 변수 인덱스 및 데이터 인덱스의 값에 의해 정해진 랜덤 데이터의 각 위치에 각각 상기 암호키 생성 인자, 상기 초기화 변수 및 상기 암호화된 데이터를 삽입한 암호화된 랜덤 데이터를 생성하여 상기 영구 저장소에 저장하는 동작 제어부
를 포함하는 웹 스토리지의 데이터 암호화 및 복호화 장치. - 제1항에서,
상기 동작 제어부는,
상기 저장부의 상기 영구 저장소에서 암호화된 랜덤 데이터를 읽어와 입력된 패스워드와 암호화된 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하고, 상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하고, 상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하고,
산출된 암호키 생성 인자 인덱스, 상기 초기화 변수 인덱스 및 상기 데이터 인덱스를 이용하여 상기 암호화된 랜덤 데이터에서 암호키 생성 인자, 초기화 변수 및 암호화된 데이터를 읽어오고, 암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 암호화된 데이터를 복호화하여 원본 데이터를 생성하는
웹 스토리지의 데이터 암호화 및 복호화 장치. - 삭제
- 제1항 또는 제2항에서,
상기 동작 제어부는 패스워드와 랜덤 데이터 또는 암호화된 랜덤 데이터의 첫 번째 행의 16바이트 데이터를 더한 후, 더한 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더하여 상기 암호키 생성 인자 인덱스를 생성하는 암호화 유닛을 포함하는 웹 스토리지의 데이터 암호화 및 복호화 장치. - 제1항 또는 제2항에서,
상기 동작 제어부는 상기 암호키 생성 인자 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 암호키 생성 인자 인덱스를 더하여 상기 초기화 변수 인덱스를 생성하는 암호화 유닛을 포함하는 웹 스토리지의 데이터 암호화 및 복호화 장치. - 제1항 또는 제2항에서,
상기 동작 제어부는 상기 초기화 변수 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 초기화 변수 인덱스를 더하여 상기 데이터 인덱스를 생성하는 암호화 유닛을 포함하는 웹 스토리지의 데이터 암호화 및 복호화 장치. - 원본 데이터와 패스워드를 판독하여 저장부에 저장하는 단계;
상기 저장부의 웹 스토리지의 영구 저장소 내에 랜덤 데이터(random data)가 존재하는지 판단하고 상기 랜덤 데이터가 존재하지 않는 경우에는 상기 랜덤 데이터를 생성하는 단계;
랜덤한 난수 값을 생성하도록 하는 메소드를 이용하여 초기화 변수와 암호키 생성 인자를 생성하는 단계,
패스워드와 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하는 단계,
상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하는 단계,
상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하는 단계,
암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 원본 데이터를 암호화하여 암호화된 데이터를 생성하는 단계, 그리고
산출된 암호키 생성 인자 인덱스, 초기화 변수 인덱스 및 데이터 인덱스의 값에 의해 정해진 랜덤 데이터의 각 위치에 각각 상기 암호키 생성 인자, 상기 초기화 변수 및 상기 암호화된 데이터를 삽입한 암호화된 랜덤 데이터를 생성하는 단계
를 포함하는 웹 스토리지의 데이터 암호화 및 복호화 방법. - 제7항에서,
패스워드와 암호화된 랜덤 데이터의 값을 이용하여 암호키 생성 인자 인덱스를 생성하는 단계,
상기 생성된 암호키 생성 인자 인덱스를 이용하여 초기화 변수 인덱스를 생성하는 단계,
상기 초기화 변수 인덱스를 이용하여 데이터 인덱스를 산출하는 단계,
산출된 암호키 생성 인자 인덱스, 상기 초기화 변수 인덱스 및 상기 데이터 인덱스를 이용하여 상기 암호화된 랜덤 데이터에서 암호키 생성 인자, 초기화 변수 및 암호화된 데이터를 읽어오는 단계, 그리고
암호키 생성 인자와 패스워드를 이용하여 암호키를 생성한 후, 상기 암호키와 암호화 알고리즘을 이용하여 상기 암호화된 데이터를 복호화하여 원본 데이터를 생성하는 단계
를 더 포함하는 웹 스토리지의 데이터 암호화 및 복호화 방법. - 삭제
- 제7항 또는 제8항에서,
상기 암호키 생성 인자 인덱스 생성 단계는 패스워드와 랜덤 데이터 또는 암호화된 랜덤 데이터의 첫 번째 행의 16바이트 데이터를 더한 후, 더한 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더하여 상기 암호키 생성 인자 인덱스를 생성하는 웹 스토리지의 데이터 암호화 및 복호화 방법. - 제7항 또는 제8항에서,
상기 초기화 변수 인덱스 생성 단계는 상기 암호키 생성 인자 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 암호키 생성 인자 인덱스를 더하여 상기 초기화 변수 인덱스를 생성하는 웹 스토리지의 데이터 암호화 및 복호화 방법. - 제7항 또는 제8항에서,
상기 데이터 인덱스 생성 단계는 상기 초기화 변수 인덱스의 값을 정해진 해시 함수로 처리하여 해시값을 생성하고, 생성된 해시값을 1바이트씩 XOR 연산한 다음, 16바이트의 설정 숫자를 더한 후 상기 초기화 변수 인덱스를 더하여 상기 데이터 인덱스를 생성하는 웹 스토리지의 데이터 암호화 및 복호화 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170003025A KR101978384B1 (ko) | 2017-01-09 | 2017-01-09 | 웹 스토리지의 데이터 암호화 및 복호화 장치 및 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170003025A KR101978384B1 (ko) | 2017-01-09 | 2017-01-09 | 웹 스토리지의 데이터 암호화 및 복호화 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180082671A KR20180082671A (ko) | 2018-07-19 |
KR101978384B1 true KR101978384B1 (ko) | 2019-05-15 |
Family
ID=63058541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170003025A KR101978384B1 (ko) | 2017-01-09 | 2017-01-09 | 웹 스토리지의 데이터 암호화 및 복호화 장치 및 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101978384B1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114338208B (zh) * | 2021-12-31 | 2023-11-28 | 章鱼博士智能技术(上海)有限公司 | 一种报文的数据加密方法及装置、电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013539149A (ja) | 2010-07-02 | 2013-10-17 | エンパイア テクノロジー ディベロップメント エルエルシー | 疑似乱数列を使用することによってデータを格納するためのデバイス |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101174058B1 (ko) * | 2008-12-18 | 2012-08-16 | 한국전자통신연구원 | 데이터베이스의 암호화된 데이터 저장 및 검색 방법 |
KR20110057369A (ko) * | 2009-11-24 | 2011-06-01 | 한국전자통신연구원 | 데이터 암호화 장치 및 그 방법 |
KR101140576B1 (ko) * | 2010-07-01 | 2012-05-02 | 고려대학교 산학협력단 | 암호화 문서에 대한 다자간 검색 시스템 및 그 방법 |
JP6403507B2 (ja) * | 2014-09-05 | 2018-10-10 | キヤノン株式会社 | 情報処理端末およびブラウザストレージ管理方法 |
-
2017
- 2017-01-09 KR KR1020170003025A patent/KR101978384B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013539149A (ja) | 2010-07-02 | 2013-10-17 | エンパイア テクノロジー ディベロップメント エルエルシー | 疑似乱数列を使用することによってデータを格納するためのデバイス |
Also Published As
Publication number | Publication date |
---|---|
KR20180082671A (ko) | 2018-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110650010B (zh) | 一种非对称密钥中的私钥生成和使用方法、装置和设备 | |
US20180013555A1 (en) | Data transmission method and apparatus | |
JP7454564B2 (ja) | 鍵管理のための方法、ユーザ・デバイス、管理デバイス、記憶媒体及びコンピュータ・プログラム製品 | |
US8358781B2 (en) | Nonlinear feedback mode for block ciphers | |
US8767959B2 (en) | Block encryption | |
US20140270166A1 (en) | Master key encryption functions for transmitter-receiver pairing as a countermeasure to thwart key recovery attacks | |
US11308241B2 (en) | Security data generation based upon software unreadable registers | |
BR102018015221A2 (pt) | Método para compartilhamento seguro de informações e sistema relacionado | |
CN111586076B (zh) | 基于混合密码的遥控遥测信息防篡改加解密方法和*** | |
CN103795533A (zh) | 基于标识符的加密、解密的方法及其执行装置 | |
JP2004534333A (ja) | コンピュータネットワークにおける分散データ処理に関する統合された保護方法及びシステム | |
CN107453880B (zh) | 一种云数据安全存储方法和*** | |
CN109543434B (zh) | 区块链信息加密方法、解密方法、存储方法及装置 | |
US20150256343A1 (en) | Securely Generating and Storing Passwords in a Computer System | |
US20220224532A1 (en) | Systems and Methods for Hiding Private Cryptographic Keys in Multimedia Files | |
CN112930660A (zh) | 用于分配数字签名数据份额的计算机实现的***和方法 | |
KR20170097509A (ko) | 화이트 박스 암호화 기반의 연산 방법 및 그 방법을 수행하는 보안 단말 | |
CN105184115A (zh) | 用于将隐式完整性或可信性检查包括到白箱实现中的方法 | |
KR20130093557A (ko) | 적어도 하나의 암호화 명령어를 포함하는 소프트웨어 애플리케이션의 협력 실행을 위한 시스템, 장치, 및 방법 | |
US11336425B1 (en) | Cryptographic machines characterized by a Finite Lab-Transform (FLT) | |
KR20230175184A (ko) | 컴퓨터 파일 안전 암호화 방법, 암호 해독 방법과 판독 가능한 저장 매체 | |
KR102282788B1 (ko) | 트랜잭션에 포함된 평문 데이터의 변경을 지원하는 블록체인 시스템 | |
CN111614467A (zh) | ***后门防御方法、装置、计算机设备和存储介质 | |
CN113722741A (zh) | 数据加密方法及装置、数据解密方法及装置 | |
US8494169B2 (en) | Validating encrypted archive keys |
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 |