현대의 대칭 암호 암호를 시대별로 나누자면 시저 암호, 비제네르는 사람이 손으로 직접 암호화하므로 고대암호라고 한다. 에니그마 같은 경우에는 기계로 암호화하기 때문에 기계암호라고 한다. 현대 암호는 컴퓨터를 이용하는 암호를 현대암호라고 부른다. 현대의 대칭암호로는 DES, 트리플 DES, AES, SEED가 있다. 대칭암호의 정의는 평문을 암호문으로 암호화하고 암호문을 평문으로 복호화할 때 동일한 키를 사용하는 암호 방식을 말한다. 대칭 암호는 다양한 이름을 가지고 있는데, 공통키 암호, 관용 암호, 비밀키 암호, 공유키 암호 등의 이름을 가지고 있다. DES (Data Encryption Standard) 1977년에 미국의 연방정보처리표준규격(FIPS)으로 채택된 대칭형 블록암호이다. 64비트의 키와..
방송 수신자 안드로이드 장치에서는 많은 이벤트들이 발생한다. 배터리가 부족할 수도 있고 네트워크가 끊어질 수도 있는 등의 이벤트들을 통지해주기 위해 방송 수신자(brodcast receiver)라는 메커니즘을 제공한다. 방송 수신자는 애플리케이션을 구성하는 4가지 컴포넌트 중 하나이다. 방송 수신자는 BroadcastReceiver 라는 클래스를 상속받아서 작성하면 된다. 이 때 onReceive()라는 메소드르르 재정의하게 되는데 방송이 수신되면 이 메소드가 호출되므로 여기에 필요한 코드를 넣으면 된다. onReceiver()의 매개변수인 context는 방송 수신자가 실행되는 컨텍스트이고 매개변수 intent를 통하여 방송에 대한 자세한 내용이 전달된다. intent의 액션에 방송의 종류가 들어 있고..
서비스의 종류 시작 타입의 서비스(started service) 액티비티가 startService()를 호출하여서 서비스를 시작 연결 타입의 서비스(bound service) 액티비티가 bindService()를 호출하여서 서비스를 시작 서비스를 사용해야 할지 스레드를 사용해야 할지 결정해야 한다면 다음을 참고해서 결정하면 된다. 서비스는 사용자가 애플리케이션과 상호작용하고 있지 않더라도 백그라운드에서 실행되는 컴포넌트이다. 따라서 백그라운드에서도 작동하게 하는 것을 원하는 것이라면 서비스를 사용하면 된다. 반대로 사용자가 애플리케이션과 상호작용하고 있는 동안에만 메인 스레드 외부에서 작업을 하는 것이 필요하면 새로운 스레드를 생성하는 것이 바람직하다. 서비스의 생애주기 서비스의 생애주기는 시작 타입의 ..
Visual Studio 나 Eclipse 같은 다른 IDE는 자동 완성이 대소문자 상관없이 작동했는데, Android Studio에서는 대문자면 대문자로, 소문자면 소문자로 타이핑해야 자동완성이 뜨길래 너무 불편해서 찾아본 결과 아주 간단하게 해결할 수 있는 문제였다. File -> Settings -> Editor -> General -> Code Completion에서 Match case 항목을 체크해제 해주면 대소문자 구분 없이 자동완성이 아주 잘되는걸 확인할 수 있다.
안드로이드 개발 공부를 하고 있는데 계속 버튼 배경이 보라색으로 지정되길래 열심히 찾아본 결과 res의 themes.xml에서 앱 테마가 MaterialComponents로 설정되어 있기 때문이었다. 해결방법은 간단하다. 1. res->values->theme->themes.xml 파일을 연다. 2. themes.xml 3번 째 줄의 parent를 Theme.AppCompat.Light 로 수정해준다.
블록암호 블록 암호는 평문을 블록단위로 처리하는 알고리즘이다. 그런데 평문의 길이가 블록 암호의 블록 크기보다 클 경우에는 어떻게 블록 암호를 적용할 것인가? 블록 암호의 모드(mode) 블록 암호를 반복하는 방법으로 임의의 길이의 평문을 암호화하기 위해서 평문을 일정한 길이를 갖는 블록으로 나누고, 각 블록에 블록 암호를 반복 적용하여 암호화를 수행한다. 패딩 평문의 길이가 가변적이기 때문에 마지막 블록이 블록의 길이와 항상 딱 맞아 떨어지지 않을 수 있다. 이럴 때 부족한 길이만큼을 0으로 채우거나 임의의 비트들로 채워 넣는 것을 패딩이라고 한다. 패딩으로 부족한 길이를 채운 뒤에 마지막 바이트에 패딩을 적용한 길이를 넣어준다. 블록 암호의 주요 모드 ECB 모드 : Electric CodeBook ..
스트림 암호와 블록암호 스트림 암호 : 입력되는 요소를 연속적으로 처리하여 지속적으로 한 번에 한 요소씩 배출하는 암호시스템 스트림 암호는 예를 들어 abcd 라는 평문을 스트림 암호를 사용해서 암호화하면, a -> y , b -> u, c -> p, d -> l 와 같이 한 요소씩 암호화가 된다. 스트림 암호에서는 암호화 시에 XOR 연산을 주로 이용하는데, XOR 연산이란 비트연산 중 하나로 두 개의 비트를 XOR 연산한다고 하면 두 비트가 서로 달라야 1이 되고, 같으면 0이 된다. 스트림 암호에서 유명한 암호로는 로널드 라이베스트가 만든 RC4가 있다. A와 B를 XOR 연산하고, 그 값을 다시 B로 XOR 연산하면 A의 값이 나오는 걸 볼 수 있다. 이러한 성질을 이용해 XOR로 암호화를 할 수..
Brute Force Attack (전사 공격) 단일치환 암호화와 시저 암호의 차이 시저 암호 - 전사공격으로 해독 가능 (최대 26번 시도해보면 평문이 구해짐) 단일 치환 암호 - 전사공격으로 해독이 힘듦 Brute Force Attack의 어려움 키가 많으면 브루트포스 공격으로 조사하는 것은 매우 어렵다. 키가 많은 경우 모든 키를 적용해보는 데에는 상당한 시간이 필요한데 단일 치환암호의 경우 1초에 10억 개의 키를 적용하여 조사한다고 해도, 모든 키를 조사하는 데 120억년 이상의 시간이 걸린다. 바른 키를 찾기까지의 평균 시간은 약 60억년으로 사실상 해독하는 것이 어렵다고 볼 수 있다. 키 공간(key space) 어떤 암호에서 사용할 수 있는 모든 키의 집합 키 공간의 크기 키 공간에 속하는..