본인확인 전자서명(signing)하는 방법

Posted by Breeze24
2017. 10. 21. 11:38 개인정보 보호법

전자서명이라는 말을 들어봤을 것이다. 


특히 전산 관련일을 하다 보면 자주 듣게 되는데, 전자서명과 암호화에 대한 얘기가 종종 나온다. 

처음 용어를 접하는 사람들이 전자서명을 암호화라고 생각하는 경우가 종종있다. 


전자서명은 암호화와는 다르다. 암호화란 데이터 내용을 볼 수 없도록 다른 내용으로 변경하는 것이나 전자서명은 내용은 수정하지 않고, 서명값을 생성해서 첨부하는 것이다. 


전자서명 목적 및 원리


.

전자서명의 목적

전자서명은 본인확인 및 컨텐츠의 위변조 방지를 위해 사용한다. 


전자서명의 원리

송신자는 컨텐츠를 해쉬하고, 해쉬한 결과를 자신의 개인키로 암호화한다. 그리고 그 결과를 컨텐츠에 첨부한다. 그리고 그 파일을 수신자에게 전달한다. 수신자는 해당파일의 컨텐츠를 해쉬하고, 이 해쉬값과 첨부되어 있는 송신자가 자신의 개인키로 암호화한 해쉬결과를 송신자의 공개키로 암호화한다. 

이 두개의 해쉬값을 비교하여 위변조 여부를 확인할 수 있다. 


.

크로스 사이트 요청 위조 예제

Posted by Breeze24
2017. 10. 2. 17:15 Web

크로스 사이트 요청 위조를 하는 방법에 대해 알아보자. 


자신이 운영하는 사이트가 크로스 사이트 요청 위조가 가능한지 여부를 판단하기 위해서 알아야 할 때 아래 내용을 참고하면 된다. 


얼마전에 사이트 웹취약점 검사를 해봤더니 크로스 사이트 요청 위조가 가능하다는 진단을 받았다. Referer 위조가 가능하다고 나와서 어떻게 위조가 가능하다는 것인지에 대해 알아야 했다. 



몇 시간을 검색을 하다가 결국 비슷한 내용을 찾아 크로스 사이트 요청 위조를 하는 내용을 만들어 봤다. 


아래에 보면 알겠지만, 소스가 길지 않으므로 이해하기 어렵지 않을 것이다. 

.


크로스 사이트 요청 위조 예제

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
 
public class Test {
      public static void main(String[] args) throws ClientProtocolException, IOException {
            Test test = new Test();
            test.action();
      }
 
      private static final String USER_AGENT = "Mozila/5.0";
      private static final String GET_URL = "http://aaa.com/CheckTest.jsp";
 
      public static void action() throws ClientProtocolException, IOException {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(GET_URL);
            httpGet.addHeader("User-Agent", USER_AGENT);
            httpGet.addHeader("REFERER", "http://naver.com");
 
            CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
 
            System.out.println(httpResponse.getStatusLine().getStatusCode());
 
            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
 
            String inputLine;
            StringBuffer response = new StringBuffer();
 
            while ((inputLine = reader.readLine()) != null) {
                  response.append(inputLine);
            }
 
            reader.close();
 
            System.out.println("결과: " +response.toString());
            httpClient.close();
      }
}

위의 코드는 aaa.com을 호출하면서 referer를 naver.com으로 하는 예제이다. CheckTest.jsp 화면에서는 입력을 받아 referer를 로깅하는 역할을 하는데, 위의 코드를 실행하게 되면 해당 페이지를 호출한 화면에서 referer가 naver.com으로 되어 있는 것을 알 수 있다. 

.


이 방법으로 웨취약점을 확인할 수 있었고, 이 내용을 참고해서 보안을 강화할 수 있었다. 

안드로이드 스튜디오와 이클립스 플러그인의 비교(어플 개발시 방법)

Posted by Breeze24
2017. 9. 27. 00:30 Android/lecture

기존에는 안드로이드 어플을 개발할 때 이클립스에서 플러그인을 추가하여 개발을 했었다. 

2012년도까지도 이런 방식으로 개발을 했었었다. 


그러다가 최근에 기존에 만들었던 어플을 수정하려고 하다 보니 문제가 발생을 했다. 

네이버 맵을 사용해야 하는데, 기존에 jar로 제공했던 라이브러리가 이제는 aar로 제공이 되는 것이었다. 

aar은 이클립스 플러그인에서 사용할 수 있는 방법이 없었다. 


안드로이드 스튜디오와 이클립스 플러그인


이런 문제로 인해 안드로이드 스튜디오를 설치해 사용할 수 밖에 없었다. 

.


이클립스에서는 굳이 빌드 시스템을 사용할 필요가 없었는데, 안드로이드 스튜디오에서는 gradle을 사용해야한다. 그리고 안드로이드 스튜디오에서는 GUI 레이아웃 편집기 기능이 강화되었고, 구글 클라우드 플랫폼도 지원한다. 다만 이클립스에 비해 무거운 단점이 있다.  

aar jar 변환


최근 출시되는 스마트폰을 지원하기 위해서는 이클립스 플러그인을 통해 개발할 수가 없다. 안드로이드 스튜디오를 통해 개발해야 하므로, 안드로이드 스튜디오에 대한 학습을 할 수 밖에 없다. 

.