curl 개요


curl은 명령어로 데이터를 전송할 수 있는 도구이다.

업로드, 다룬로드 모두 가능하며 HTTP, HTTPS, FTP, LDAP, TELNET, SMTP, POP3, SCP등 주요 프로토콜을 지원한다.

윈도우, 유닉스, 리눅스등 다양한 플랫폼에서 실행가능한다.



설치


리눅스나 Mac OS X는 기본적으로 설치되어 있다.

윈도우에서는 

https://winampplugins.co.uk/curl/ 에서 다운로드 받아서 설치한다. 




curl 사용법


 curl [options...] <URL>


옵션은 -short 형식 과 --long형식 두가지를 사용할 수 있다.




HTTP/HTTPS 옵션 정리


-k  --insecure 


https 사이트를 SSL certificate 검증없이 연결한다.


-l  --head 


HTTP header 만 보여주고 content 는 표시하지 않는다


-D  --dump-header <file> 


<file> 에 HTTP header 를 기록한다.


-L  --location


서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다.

--max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다


curl -v daum.net 을 실행하면 결과값으로 다음과 같이 HTTP 302 가 리턴된다.

< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/

-L 옵션을 추가하면 www.daum.net 으로 재접속하여 결과를 받아오게 된다.


-d  --data

HTTP Post data

FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의 웹서비스 디버깅시 유용한 옵션이다


-v  --verbose

동작하면서 자세한 옵션을 출력한다.


-J   --remote-header-name

어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다.


-o  --output  FILE

curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용)


-O  --remote-name

file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다.


-s  --silent

정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다.

HTTP response code 만 가져오거나 할 경우 유리하다.




블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

WebGoat 8 설치 및 실행방법은 

(1) Docker를 사용해서,

(2) maven을 사용해서 springboot으로 빌더 해서 사용한다.


여기서는 maven을 사용해서 빌더해서 사용하는 방법으로 실행 보자.


STEP-1.  JAVA 8 설치


기본적으로 칼리 리눅스(2017.1 이후버전은) 는 Java 8이 설치되어 있다. 

확인해 보자.

 

 # java -version 




STEP-2.  maven 설치 


칼리에는 기본적으로 메이븐이 설치되어 있지 않아서 Apache Maven을 다운로드 받아서 설치한다. 


다운로드 링크: https://maven.apache.org/download.cgi



apache-maven-3.6.0-bin.tar.gz 다운로드 한다.



  # cd Downloads

  # ls -l 

  # tar xvzf apache-maven-3.6.0-bin.tar.gz

  # cd apache-maven-3.6.0/bin

  # export PATH=$PATH:/root/Downloads/apache-maven-3.6.0/bin

  # mvn -version






STEP-3. Git 설치


칼리 리눅스는 기본적으로 Git이 설치 되어 있다.



  # git --version




STEP-4. WebGoat 설치


칼리 리눅스는 기본적으로 Git이 설치 되어 있다.

메이븐으로 WebGoat 서버를 빌드한다.(시간이 꽤 걸림..)



  # git clone https://github.com/WebGoat/WebGoat.git


 # cd WebGoat


 # mvn clean install


 # mvn -pl webgoat-server spring-boot:run





STEP-5. 브라우저로 WebGoat 서버에 접속


서버가 정상적으로 구동되었다면 이제 브라우저에서 서버로 접속해 보자 



 http://localhost:8080/WebGoat



[참고] 서버의 IP를 변경하려면 

 WebGoat/webgoat-container/src/main/resources/

 application.properties 파일에서 다음과 같이 변경한다.



 server.address=x.x.x.x





로그인화면에서 [Register new user]를 클릭해서 새로운 계정을 만들어서 로그인 한다.




설치와 실행이 끝이 났네요.

자 이제 열심히 웹 취약점을 학습해 보아요~~~ ^^


'보안 > 시큐어코딩' 카테고리의 다른 글

Kali(칼리)리눅스에 WebGoat 8 설치하기  (0) 2018.12.06
Canonicalization(정규화)  (0) 2018.11.20
KISIA 시큐어코딩 사전설문 링크  (0) 2018.03.14
금융보안원 설문지 링크  (0) 2018.03.06
BSIMM은 무엇?  (0) 2018.03.05
[Angular JS] 앵귤라JS 시큐어코딩  (0) 2018.01.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[체크 또 체크] 이더리움 스마트 컨트랙트 프로그램을 작성할 때 반드시 주의 해야 하는 사항들 



(1) 접근제어자(Access Modifier) 설정


실수를 방지하기 위해서는 최소한의 접근 권한을 가지도록 접근제어자를 설정한다.


public: 어디에서나 호출가능

external: 해당 컨트랙트 내부에서는 호출 불가능, 외부에서만 호출 가능

private: 해당 컨트랙트 내부에서만 호출 가능

internal: 해당 컨트랙트와 derived 컨트랙트만 호출 가능 



(2) 오버플로우/언더플로우


오버플로우는 숫자가 최댓값 이상으로 증가하는 경우이다.


   0xFFFF.......FF

+ 0x000.........01

-----------------

   0x0000......00


연산을 수행하는 경우 오픈제플린에서 제공하는 safeMath를 사용하여 연산을 수행하게 되면 오버플로우나 언더플로우가 발생시 예외를 발생시키고 revert되어서 안전하게 연산을 수행할 수 있다.


오픈제플린: https://openzeppelin.org/api/docs/math_SafeMath.html

오픈제플린Git: https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol



(3) 함수의 Reenter 방지


외부 스마트 컨트랙트 함수를 호출하는 경우, 그 함수에서 호출한 함수를 재귀 호출하게 되어 있다면 반복적으로 토큰을 전송하는 등 예상치 못한 결과를 발생 시킬 수 있다.


사례) The DAO 해킹

2016년 6월17일, 다오의 기능 중 하나인, 투자자들이 클아우드 세일에 참여해서 다오 토큰 구매를 위해 지불했던 이더를 환불받는 기능에서, 이더를 환불신청(,split)해서 이더를 먼저 받고, 자신의 다오토큰을 되돌려주기전에 다시 이더를 환불 받는 재귀 call 코드 (Recursive calling vulnerability)를 통해 무한환불 공격을 수행하여 총 243만 이더(약 750억)가 해킹당함.


이를 방지하기 위해서는 nonReentrant라는 modifier 사용.

noReentrant를 사용하면 reentrancy_lock이라는 플래그 변수로 lock 상태로 전환되어, 해당 함수가 실행되는 도중에 해당 함수 재귀 호출을 막아준다.



[작성중]


(4)  Storage 변수 사용 주의


(5) memory 변수 선언 


(6) 버전 선언 규칙 지정


(7) 다중 상속 주의 


(8) 컨트랙트 오너 관리 




블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

Canonicalization 은 때로는 Stnadardization 또는 Normalization이라고도 합니다.

정규화 표준화라고 번역되는데 CERT SecureCoding Standard 에서는 Canonicalization과 Normalization을 같으면서도 약간은 다르다고 설명합니다. 


일단 CERT SecureCoding Standard에서는 다음과 같이 정의하고 있습니다.


"Canonicalization is the process of lossess reduction of the input to its equivalent simplest known form."


--> 알려진 가장 심플한 형식으로 입력데이터 손실없이 줄이는 것이다. 


"Normalization is the process fo lossy conversion of input data to simplest known ( and anticipated) form."


--> 알려진 가장 심플한 형식으로 입력데이터 손실이 있더라도 변환하는 것이다.



그런데 우리는 그냥 정규화라는 한 단어로 같이 사용하기도 합니다.



예를들어서 다음과 같은 파일명이 입력값으로 들어오는 경우


a/../b/./c.txt 


Canonicalize 에서는 b/c.txt

Normalize에서는     c:\home/test/c.txt  


가장 심플한 형식으로 줄이거나 변환해서 사용하는 것을 정규화라는 단어로 설명합니다.



정규화는 신뢰되지 않은 외부에서 입력되는 데이터에 대해 해당 프로그램이 식별해서 사용하기 가장 단순한 형식으로 데이터를 변환하는 작업입니다. 이 작업이 제대로 수행되지 않아 침해사고가 빈번하게 발생됩니다.


파일명이나, 유니코드, URL, XML 이러한 입력값들은 인증이나 인가를 우회하기 위해 조작된 값으로 애플리케이션에게 값이 전달되는 경우가 많습니다. 

안전하게 외부 입력값을 처리하려면 외부입력값에 대한 적절한 정규화가 적용되는것이 사전 요구사항입니다.


위키의 링크입니다. 파일명이나, 유니코드, URL, XML에 대한 정규화에 대한 설명이 잘되어 있네요. 참고하세요.

https://en.wikipedia.org/wiki/Canonicalization


'보안 > 시큐어코딩' 카테고리의 다른 글

Kali(칼리)리눅스에 WebGoat 8 설치하기  (0) 2018.12.06
Canonicalization(정규화)  (0) 2018.11.20
KISIA 시큐어코딩 사전설문 링크  (0) 2018.03.14
금융보안원 설문지 링크  (0) 2018.03.06
BSIMM은 무엇?  (0) 2018.03.05
[Angular JS] 앵귤라JS 시큐어코딩  (0) 2018.01.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

양자컴퓨터... 지금 현존하는 컴퓨터의 계산능력을 초월한 동시계산량을 가지는 컴퓨터라고 한다. 2017년 49큐비트 프로세스로 2의 49승의 동시계산을 수행하는 컴퓨터가 IBM과 구글에서 발표하였다. 


우리가 아는 암호기술은 풀지 못하는 문제가 아니라 푸는데 오랜 시간이 걸리는 문제 인데 이런 양자컴퓨터가 상용화가 된다면 기존의 암호화는 더이상 안전하지 않을것 이라고 이야기 한다.


여기벌써 처음 들어보는 단어가 나왔다.


큐비트(quantum bit, qbit) 

물질의 최소 단위인 양자 정보의 단위다. 일반 컴퓨터가 정보를 0과 1 비트 단위로 처리하고 저장한다면, 양자 컴퓨터는 1과 0의 상태를 동시에 가지는 큐비트를 단위로 쓴다. 


아욱... 수십년 0과 1로만 데이터 처리를 이해하고 있는 사람으로서는 어떻게 1과 0을 동시에 가지지 라고 생각할 수 있다.


아래 그림은 양자 컴퓨터의 특징을 설명하고 있는 그림이다. 


[그림출처] KISA 양자컴퓨팅 환경에서의 암호기술 이용 안내서 



현재의 반도체는 트랜지스터를 기반으로 전류가 흐르면 1, 전류가 흐르지 않으면

 0으로 처리된다. 이 트랜지스터는 점점 작아져서 현재는 더 이상 물리적으로

작게 만들 수 없을 만큼 작게 반도체에 집적된 상태이다.


기존 컴퓨터의 한계를 극복하기 위한 컴퓨터가 양자 컴퓨터이다.


양자 컴퓨터는  작은 에너지 덩어리인 양자가가 가진 중첩과 얽힘이라는 특성을 사용하는 것인데. 이러한 특성 때문이 한개의 입자속에 여러속성을  중첩된 형태로 가질 수 있다. 그리고 이 속성들이 고정된 형태가 아니라 서로 영향을 주고 받으며 얽히는 특성을 가지고 있어 우리의 기존 상식으로 이해하기 어려운 물리 현상이다.



큐비트는 0이면서 동시에 1일수도 있기 때문에 2개의 큐비트는 00,01,10,11 등 4개의 값을 동시에 가질 수 있다. 


이러한 특성으로 큐비트가 표시하는 정보량은 큐비트가 3개일때 8, 4개 일때 16식으로 2의 거듭제곱 형태로 기하급수적으로 늘어나게 된다.


즉, 양자 중첩을 통해 양자 컴퓨터는 기존 컴퓨터와 다르게 병렬계산이 가능해 진다. 양자 컴퓨터의 능력은 슈퍼컴의 36배 이상의 처리 능력을 가진다고 한다. 즉 몇일이 걸리 작업을 한시간이면 가능하다는 것이다.


그래서 미국과 영국, 중국은 수천억달러의 기술 개발비를 투입하면 사활은 건 전쟁을 수행하고 있다.


현재 한국은 삼성이 IBM의 진영에 합류하고 양자컴퓨터 개발에 박차를 가하고 있으며, 구글은 머신러닝, 자율주행, 양자컴퓨터를 묶어서 세계를 제패하려고 하고 있다.


이러한 어마어마한 컴퓨팅 파워는 현재 소인수 분해의 계산 시간이 오래 걸림을 사용하는 암호화 방식이 무용지물이 될 수 있게 할 수 있다.



양자 컴퓨팅 환경에서 권고 되는 양자내성암호 알고리즘은 크게 5가지로 구분 하고 있다. 


[그림출처] KISA 양자컴퓨팅 환경에서의 암호기술 이용 안내서 



양자내성암호별 최적화된 오픈소스 라이브러리가 배포되고 있는 사이트 주소이다.

[그림출처] KISA 양자컴퓨팅 환경에서의 암호기술 이용 안내서 



미리 미리 준비해야 하지 않을까 싶다.

좀 더 시간을 내서 양자내성암호 알고리즘을 하나씩 하나씩 파헤쳐 봐야 겠다.



양자컴퓨팅이란 무엇인가? 를 쉽게 설명하고 있는 동영상이 있어서 링크 걸어본다.

https://www.youtube.com/watch?v=8gWU0KLimNU


"KISA 양자컴퓨팅 환경에서의 암호기술 이용 안내서" 다운로드 링크도 걸어본다.

https://www.kisa.or.kr/public/laws/laws3_View.jsp?cPage=1&mode=view&p_No=259&b_No=259&d_No=96&ST=total&SV=



열공~~~ 화팅!!!!



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

데이터 해싱



해시함수(Hash Function)는 어떤 형태의 데이터이든 입력데이터의 길이와 상관없이 고정된 길이의 숫자를 반환하는 함수이다.


암호화 해시 함수(Cryptographic hash function)는 어떤 데이터라도 고유의 디지털 지문을 생성해 주는 함수이다.  


해시함수의 특징은 어떤 종류의 데이터도 빠르게 해시값을 계산할 수 있으며, 동일한 입력값에 대해서는 동일한 해시값을 생성한다.

입력값이 변하게 되면 해시값도 예측 불가능하게 변해야하며, 해시값에서 원문을 추출할 수 없다. 또한 둘이상의 입력값이 같은 해시값을 생성할 수 없다. 그래서 해시값은 디지털 지문으로 사용가능한것 이다.



다음은 해싱 데이터의 5가지 패턴이다.





블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[시나리오] 소유권을 관리하는 블록체인 구축 


1. 시스템은 순수 분산 P2P시스템이고, 각 사용자가 기여한 계산자원으로 이루어진다.

2. 인터넷을 사용해 개별노드의 네트워크를 연결한다.

3. 노드의 개수는 물론 노드의 안정성과 신뢰성도 전혀 알 수 없다.

4. 목표는 디지털재화( ex: 쇼핑몰 포인트, 디지털 화폐 등)의 소유권을 관리하는 것이다.



시스템 개발에 고려해야 하는 사항들.

1. 소유권 기술(설명)

2. 소유권 보호

3. 트랜잭션 데이터 저장

4. 신뢰할 수 없는 환경에 배분할 원장 준비

5. 원장 배분

6. 원장에 새 트랜잭션 추가

7. 어느 원장이 진실인지 판단



소유권 기술(Describe)

트랜잭션은 소유권의 이전을 설명하는 좋은 방법이며, 트랜잭션 전체 이력은 현 소유자를 확인할 수 있는 핵심이다.


소유권 보호

타인이 다른 사람의 자산에 함부로 접근하지 못하도록 보호해 줄 장치가 필요하다. 암호화 기술을 이용하여 개별적인 트랜잭션을 보호할 수 있게 한다.


트랜잭션 데이터 저장

트랜잭션 이력은 소유권을 명확히 하는 핵심 요소이므로 안전한 방법으로 저장해야 한다.


신뢰할 수 없는 환경에 배분할 원장 준비

원장의 복사본들이 신뢰할 수 없는 네트워크의 신뢰할 수 없는 노드들 사이에 흩어져 있고, 원장을 통제하거나 조정하는 중앙통제 노드는 존재하지 않으므로 각 노드에게 원장의 제어를 맡겨야 하는 상황에서 원장이 위조되거나 조작되지 않게 해야 한다.


원장과 트랜잭션이력 모두 한번 기록되면 바꿀 수 없게 하여 이러한 문제점을 해결할 수 있다.


블록체인데이터구조는 한편으로는 변경을 못하게 하면서 다른 한편으로는 새로운트랜잭션을 추가할 수 있도록 승인하여 해결한다.


원장배분

데이터구조에 새로운 트랜잭션을 추가할때 오직 유효하고 승인된 트랜잭션만 추가될 수 있도록 보장해야 한다. P2P시스템의 모든 구성원이 새 데이터를 추가할 수 있도록 허용하는 동시에 각 구성원이 P2P 시스템의 각 피어를 감독하게 해서 해결한다.


어느원장이 진실인지 판단

모든 구성원이 새로운 데이터를 추가할 수 있으므로, 각 피어들이 서로 다른 트랜잭션 데이터를 받을 가능성이 생긴다. 


순수 분산 P2P 시스템에는 어떤 트랜잭션 이력을 서택해야 할지 결정해 줄 중앙통제 장치가 없기 때문에 모든 노드가 독립적인 다수 의견을 따라 "진실된 트랜잭션 이력"을 개별적으로 결정해서 이 문제를 해결해야 한다.



블록체인으로 소유권을 기록하려면 다음 두가지가 필요하다.


1. 소유권 이전을 기술한다.

2. 트랜잭션 이력을 유지한다.



소유권 이전을 기술한다.


트랜잭션은 현 소유자의 소유권을 다른 사람에게 이전하는 행위를 의미하며, 예를 들어 계좌이체를 수행하는 경우 트랜잭션은 다음과 같은 정보를 관리해야 한다.


. 소유권을 이전하는 계정의 식별자

. 소유권을 이전받는 계정의 식별자

. 이전하려는 재화의 총액

. 이전이 완료되는 시각

. 이전을 위해 지불해야 하는 수수료 <= 블록체인은 분산시스템이기 때문에 통일된 

                                                    수수료 체계가 없다.

. 이전에 동의한다는 원소유자의 증명 



트랜잭션 이력을 유지한다.


트랜잭션을 수행하는것은 트랜잭션 데이터에 기록된 대로 소유권의 이전이 일어난다는 것을 의미한다. 또한 원장에 트랜잭션 데이터를 추가한다는 의미이기도 하다.


블록체인은 모든 트랜잭션을 일어난 순서대로 블록체인데이터구조에 저장하여 전체 이력을 유지한다.



트랜잭션 이력의 무결성을 유지하기 위한 필수 3가지 요소


1. 형식적 정확성

2. 의미상 정확성

3. 승인



형식적 정확성


트랜잭션 데이터가 필요한 모든 정보를 정확한 형식으로 기술해야 한다.



의미상 정확성


트랜잭션 데이터의 의미와 의도한 결과의 관련이 명확해야 한다. 예를 들면 계정에 있는 잔고이상의 금액이 이전되지 않도돌 보장해야 한다. 와 같이 업무에 대한 정확한 이해를 바탕으로 데이터가 정의되어야 한다.



승인


소유권을 이전하는 소유권자 본인만 트랜잭션을 실행해야 한다.


블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

소유권의 본질은 내가 가진것이 내것이라고 증명하는 것이다. 그럼 내가 가진것이 내것이라는 것을 어떻게 증명할 수 있을까?


소유권을 입증하기위해 다음과 같은 3가지 요소가 필요하다.

- 소유자가 누구인가?

- 소유 물건은 무엇인가?

- 그 물건이 소유자의 것인가?


내가 가지고 있는 물건이 내것임을 증언하는 사람이 많다면 그 사실이 진실일 가능성이 높아진다. 이 아이디어가 블록체인의 핵심 개념중의 하나이다.


식별(Identification) 

이름이나 ID등을 사용하여 "누구"라고 주장하는것이다.


인증(Authentication)

내가 나라고 증명하는 것이다. 이 증명을 위해 그 사람만의 고유한 무엇(지문, 얼굴, 패스워드, 신분증, 일련번호 등) 을 사용하게 된다.


승인(Authorization)

식별된 사람의 성질과 특성에 기반해 특정 자원이나 서비스에 접근을 허가해 주는것이다.  성공적인 인증과 함께 인증된 특정인이가진 특성과 권한에 대한 평가를 토대로 얻는 최종 결과이다.



소유자와 물건의 매핑은 무엇으로 할 수 있나?


소유자와 물건의 매핑은 원장(장부)에 기록해 유지할수 있다.  

원장에는  소유권증명, 소유권이전, 투명성, 개인정보보호, 데이터 읽기, 데이터쓰기, 데이터 사용이력, 신규데이터 생성, 상태유지, 상태변경과 같은 것들이 포함될 수 있다.



소유권과 블록 체인은 어떤 관계가 있나?


원장을 하나만 생성해서 관리된다면... 손상되거나 파괸된다면? 실수로 또는 고의로 위조된다면... 조작될 위험이 있는 원장을 하나만 유지하는 대신 순수 분산 P2P 시스템을 활용해 다수의 노드가 동의하는 진실을 이용해 소유권을 확인한다면 마치 다수의 증인을 확보한 재판과 유사할 수 있다.


즉 하나의 중앙 통제된 원장 대신 소유권을 기록하는 개별 원장들의 그룹을 형성한 뒤 대다수의 개별 원장이 동의하는 진실을 사용해 소유권을 관리하게 하는 것이다.


원장을 블록체인-데이터-구조를 이용하여 순수 분산 P2P시스템의 각 노드에서 의해 관리하여 하나의 일관된 소유권상태를 집단에 증명할 수 있도록 할 수 있다.


원장의 순수 분산 P2P 시스템의 무결성은 소유권에 대한 신뢰할 수 있는 판단이 가능하도록 해주고 법적으로 허가된 소유자만 자산의 소유권을 타인에게 이전할 수 있도록 보장한다.




블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

블록체인이란 용어는 다음과 같은 네가지 다른 의미로 사용된다.


1. 데이터 구조 이름

2. 알고리즘 이름

3. 기술묶음 이름

4. 일반 응용분야를 가지는 순수 분산 P2P 시스템을 포괄하는 용어



데이터 구조 이름


"블록"은 데이터의 단위를 의미하며, "체인"은 순서대로 연결되어 있다는 의미이다.

예를 들어 책의 한 페이지는 블록인 된다. 이러한 페이지들은 페이지 번호를 붙여 한권의 책으로 구성된다. 책에 포함되어 있는 정보는 페이지 순서대로 정렬되어 있다고 볼 수 있다. 혹 누군가 페이지를 찢었는지 확인하려면 페이지 번호에 누락이 있는지 살펴보면 된다.



알고리즘 이름


알고리즘이란 컴퓨터가 실행해야 하는 일련의 명령어들을 의미한다. 즉 데이터 구조 내의 정보 내용을 민주주의 투표 방식과 비슷한 방법으로 서로 협상하는 절차를 설명할때 "블록체인"이라는 단어를 사용한다.



기술묶음 이름


순수 P2P 시스템의 무결성확보를 위해 사용하는 데이터구조, 알고리즘, 암호화, 보안기술의 조합등을 통칭할때 "블록체인" 이라는 단어를 사용한다.



기술묶음 이름


블록체인의 기술묶은을 활용하는 거래 방부들의 순수 P2P 시스템을 지칭하는 포괄적인 용어로 "블록체인"이라는 단어가 사용된다.



"블록체인"이라고 불리는 이 기술은 2008년 "사토시 나카모토"라는 가명으로 처음 제안되었다.



"블록체인"이란 "무결성을 확보하고 유지하기 위해" 순서에 따라 연결된 블록들의 정보를 "암호화 기법과 보안기술을 이용해 협상하는 알고리즘으로 구성된" 소프트웨어 요소를 활용하는 "원장의 순수 분산 P2P시스템"을 의미한다.



 다니엘 드레셔가 지은 "블록체인 무엇인가?"를 정리하고 있습니다.

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

P2P시스템 정의


P2P(Peer to Peer) 시스템은 여러개의 개별 컴퓨터들로 구성된 분산 시스템으로, 한 노드의 자원(계산능력, 저장공간, 정보배분등)을 다른 노드들이 직접 사용할 수 있다는 특징을 가진다.


즉 P2P시스템에 참여 하게 되면 사용자의 컴퓨터는 P2P시스템의 노드로 전환되고, 모든 노드에게는 동등한 권리와 역할이 주어진다. 


예를 들어 P2P 파일공유시스템에 가입하게 되면 개별 파일은 각자의 컴퓨터에 저장되어 있으나 모든 사용자와 공유된다. 누군가 파일 다운로드를 실행하면 다른 누군가의 컴퓨터로 부터 파일이 다운로드 되기 시작한다. 





P2P시스템 아키텍처



P2P는 분산 컴퓨터 시스템으로 운영된다.  


순수 분산 P2P 시스템에서는 모든 노드는 동일한 과제를 수행하며 자원과 서비스의 생산자이인 동시에 소비자 역할을 한다.


중앙통제 P2P시스템은 중앙 노드를 이용해 노드간 상호작용을 중재하고 피어노드가 제공하는 서비스 목록을 유지 관리하고 노드를 검색하고 식별하는 역할을 수행한다. 대표적인 예가 냅스터이다. 냅스터는 중앙 데이터베이스에 접속한 모든 노드가 각 노드가 보유한 노래 정보를 저장하고 있다.



P2P 시스템과 블록체인의 연관성


블록체인은 분산시스템에서 무결성을 확보하고 유지하는 도구라고 할 수 있다. 즉 순수 분산 P2P 시스템은 무결성의 확보와 유지를 위해 블록체인 시스템을 사용한다.




P2P 시스템과 무결성


무결성이란?

소프트웨어 시스템 관점에서 무결성은 시스템의 안전성, 완결성, 일관성, 정확성 및 변형과 오류 없음을 의미하는 비기능적 측면이다. 


순수 P2P 시스템의 무결성을 위협하는 요소로 다음 2가지를 고려해 볼 수 있다.


- 기술적 결함

   인터넷으로 연결된 개별 컴퓨터로 구성되는 시스템이기 때문에 모든 기계장비는 언제든지 고장이나 오류를 일으킬 수 있다. 


- 악의적 피어

   시스템을 자신의 이익을 위해 착취하려는 개인의 악의가 원인이 될 수 있다.  P2P시스템 사용자들은 다른 피어를 믿지 못하는 순간 시스템을 떠날것이고, 더 이상 계산 자원에 기여하지 않게 되어 시스템 구성원이 감소하게 되고, 저하된 시스템 효용성으로 인해 또 다른 이탈자가 나오게 되어 시스템이 완전히 와해 되는 상황이 발생될 수 있다.



블록체인이 해결해야 할 핵심 문제는 "개수도 알려져 있지 않고 신뢰성과 안정성도 알수 없는 피어들로 구성된 순수 분산 P2P 시스템의 무결성을 확보하고 유지하는 것이다"





 다니엘 드레셔가 지은 "블록체인 무엇인가?"를 정리하고 있습니다.



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

Tensorflow GPU환경 구축을 위한 CUDA Toolkit, cuDNN v5.1 두 가지 프로그램을 설치해야 한다.

1. CUDA Toolkit을 설치한다.

 https://developer.nvidia.com/cuda-downloads


2. cuDNN 설치한다.

https://developer.nvidia.com/cudnn


cuDNN의 경우 Nvidia Developer사이트의 회원 가입이 필요하므로 가입하면 된다.

주의 할점은 윈도우 10환경에서는 Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0 즉, 5.1버전으로 다운로드 받아야 오류가 발생하지 않는다.


3. 텐서플로우 GPU버전 설치한다.

pip install --upgrade tensorflow-gpu 


4. anaconda prompt에서 방금 만든 환경으로 접속한다.

activate tensorflow


'4차산업 > 머신러닝&딥러닝' 카테고리의 다른 글

Tensorflow GPU 환경구축  (0) 2018.04.03
[링크] 머신러닝,딥러닝  (0) 2018.04.03
머신러닝의 역사  (0) 2018.04.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

아나콘다 다운로드: https://www.anaconda.com/download/


 <== 책을 클릭하여 LAB Github 로 연결


번역자의 gitHub:  https://github.com/rickiepark/introduction_to_ml_with_python

텐서 플로우 블로그 "파이썬 라이브러리를 활용한 머신러닝" 1장과 2장 내용 



텐서플로로 구현하는 딥러닝과 강화학습 <== 책을 클릭하여 LAB Github 로 연결 


텐서플로우 문서 한글 번역본 : https://www.gitbook.com/book/tensorflowkorea/tensorflow-kr/details



파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문 <== 책을 클릭하여 소스코드 다운로드 



머신러닝을 위한 파이썬 


0. 데이터분석용 파이썬 패키지 소개

1. Numpy(넘파이)

2. Padans (판다스)

3. Matplotlib(맷플롯립) ,  Matplotlib의 여러가지 플롯   matplot3d 튜토리얼

4. SciPy(싸이파이)



설명이 쉬운 머신러닝,딥러닝


1. 김성훈교수님의 모두를 위한 딥러닝 https://hunkim.github.io/ml/

2. 조대협 CNN

3. A Beginner’s guide to understanding convolutional network https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/




파이썬기초


예제로 배우는 파이썬 프로그래밍



LAB 다운로드


LAB.zip


한글라벨처리.txt


PCA.ipynb





'4차산업 > 머신러닝&딥러닝' 카테고리의 다른 글

Tensorflow GPU 환경구축  (0) 2018.04.03
[링크] 머신러닝,딥러닝  (0) 2018.04.03
머신러닝의 역사  (0) 2018.04.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

출처:
https://projectresearch.co.kr/2017/06/14/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9Dml%EC%9D%98-%EA%B0%84%EB%9E%B5%ED%95%9C-%EC%97%AD%EC%82%AC/



1946 – 2017

우리가 머신러닝(ML)에 깊이 관여하기 전에, 우리가 어디로 가고 있는지 알아보기 전에 우리가 어디에 있었는지 알아야합니다. 다른 역사와 다르지 않은 것처럼 보일지라도, 흥망성쇄으 기로 앞 시점에서 현재의 인기가 과장된 선전인지 아니면 거대한 패러다임의 변화인지를 우리가 직접 결정하게 될 것입니다.

위키피디아 머신러닝(ML)의 타임 라인은 베이즈의 정리의 토대를 발견 한 1763 년부터 시작합니다. 그러나 컴퓨터가 발명된 1946년인  20 세기부터 살펴 보도록 하겠습니다.


1946

컴퓨터의 발명은 인간의 역사에서 있어 불의 발명만큼 중요 할 수도 있으며, 인공지능(AI)은 같은 중요한 자리를 차지할 수있는 좋은 기회입니다. ENIAC (Electronic Numerical Integrator and Computer)는 미 육군에 의해 지어지고 헝가리인 John von Neumann에 의해 프로그래밍 할 수있게 해주는 최초의 전자 범용적인 프로그래밍 가능 컴퓨터였습니다. 그는 또한 헝가리인 동료 Edward Teller가 개발 한 H-폭탄 설계의 타당성을 검증하는 프로그램을 작성했습니다.

ENIAC

ENIAC


1950

언론은 ENIAC을 “자이언트 브레인 (Giant Brain)”으로 예고했으며, 이는 앨런 튜링 (Alan Turing)으로 하여금 인공지능(AI)을 감지하기 위한 이른바 튜링 테스트 ( Turing-Test) 를 설계하는데 동기가 되었습니다. 테스트를 통과하기 위해서는 사람이 컴퓨터가 아니라 다른 인간이라고 믿게해야 하는데, 아직도 통과하지 못했습니다.

튜링테스트? http://blog.naver.com/PostView.nhn?blogId=int9708&logNo=220862025369&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView



1952

Arthur Samuel은 체커 게임 방법을 배우는 최초의 머신러닝 격인 컴퓨터 프로그램을 개발했습니다. 그의 알고리즘은 경험으로 부터 배우기 위해 발견적 탐색 메모리를 사용하였습니다. 1970 년대 중반까지 그의 프로그램은 인간과 시합하여 이기고 있었습니다.


1956

Dartmouth 워크샵에서 Marvin Minsky, John McCarthy, Claude Shannon 및 Nathan Rochester는 “Artificial Intelligence (인공지능)”라는 용어를 제안했습니다.


1958

프랭크 로젠 블랏 (Frank Rosenblatt)은 해군연구소 (US Office of Naval Research)가 시각 인식 작업을 해결하도록 위임한 최초의 인공 신경망 인 퍼셉트론(Perceptron)을 설계했습니다.

뉴욕 타임스는 퍼셉트론 (Perceptron)이  “걸고, 말하고,보고, 쓰고, 스스로 번식하여 그 존재를 인식할 수 있는 전자 컴퓨터의 배아체”라고 보도하였습니다.

Mark I Perceptron
마크 I  퍼셉트론 (Perceptron)


1967

Cover and Hart는 최근접 이웃 알고리즘( Nearest Neighbor algorithm) , 거대한 이정표와 컴퓨터 패턴 인식의 탄생을 기록했습니다.

KnnClassification

KNN 분류


1974  – 1980, 인공지능(AI)의 첫번째 겨울

과대 광고로 인해 기금이 고갈되어서 진전이 거의 없었습니다.


1979

스탠포드 학생들은 장애물을 피하고 움직일 수있는 최초의 모바일 자율 로봇인 스탠포드 카트를 제작합니다.

Stanford Cart 1979

스탠포드 장바구니 1979


1980 – 1987, 인공지능(AI)의 여름 

규칙 기반 전문가 시스템의 도입으로 기업들이 신속하게 채택하기 시작했고, 머신러닝(ML)에 대한 새로운 관심을 불러 일으켰습니다.


1981

설명 기반 학습 (EBL, Explanation-Based Learning)이 도입되었습니다. 중요도가 낮은 데이터를 삭제할 수 있도록 훈련 데이터를 분석하여 일반화 규칙을 만들었습니다.


1985 – 신경망 획기적 발전

Backpropagation 알고리즘을 로(재)발견으로 숨겨진 레이어(Hidden Layer)에 더 복잡하고 강력한 신경망를 학습 할 수있었습니다. 그 결과, 연구를 촉진하게 되었고, 뇌의 모델인 Neural Nets에 대해 모든 사람을 흥분하게 만들었습니다. 그리고 다시 한번, 과대한 광고와 꿈으로 과장 되게 되었습니다.

NeuralNetworks

신경망

 

 


1987 – 1993, 인공지능(AI)의 첫번째 겨울 

신경망(Neural Network)은 좋은 이론이 부족하고 너무 과한 경향이 있어 호의적이지 않았다.


1990

머신러닝(ML)에 대한 통계적 접근 방식인 Support Vector Machine (SVM)의 신개념이 소개되었습니다.  SVM은 엄격한 수학적 분석을 위한 훌륭한 후보로써 최신의 성능을 제공하였습니다.

SVM

Support Vector Machine (SVM)


1997

IBM의 딥 블루 대 체스 그랜드 마스터 게리 카스파 로프 . 머신 승리!

IBM의 딥블루(Deep Blue) 와 체스 최우승자 Gary Kaspárov 와의 대결에서 딥블루가 승리 했습니다.

IBM vs Garry

IBM의 딥블루와 체스 그랜드 마스터 Gary Kaspárov의 대결


2006 , 현재의 날, 확산 및 상업적 채택

빅데이터, 빠른 컴퓨팅, 성숙 된 신경망 모델은 머신러닝(ML)에 대한 관심을 다시 불러 일으켰습니다. 디지털 변환 , 머신러닝(ML)을 통한 빅 데이터는 경쟁우위를 위해 회사 프로세스, 제품 및 서비스에 통합됩니다.
Coursera 에서 머신러닝(ML)을 위한 신경망(Neural Network) 을 개발한 Geoffrey Hinton 은 딥러닝( Deep Learning)을 유행어로 확신시키며,더 나은 모델을 학습 할 수있는 심오한 신경망의 새로운 아키텍처를 설명하기 위해 신경망을 다시 브랜드화 했습니다.

Geoffrey Hinton Deep Learning

Geoffrey Hinton – 딥러닝( Deep Learning)


2011

IBM Watson 컴퓨터가 참가자들이 자연 언어로 질문에 답하는 Jeopardy TV 프로그램에서 우승했습니다.


2012

Coursera 에서 훌륭한 머신러닝(ML) 과정을 개발한 Stanford의 Jeff Dean 과 Andrew Ng 는 Google Brain Project를 시작했습니다. 그들은 Google의 모든 인프라를 사용하여 이미지와 비디오의 패턴을 감지하는 심층신경망을 개발했습니다.

Google Brain Project 768x419

구글 브레인 프로젝트

제프리 힌튼 (Geoffrey Hinton) 팀은 성숙 단계에 이르렀고 관심을 끌고 있는 심층신경망 (DNN, Deep Neural Network)을 사용하여 큰 차이로 ImageNet 대규모 시각적 인식 챌린지 2012 (ILSVRC2012) 경연 대회에서 우승합니다. 이것을 계기로 DNN을 기반의 머신러닝(ML, Machine Learning)이 현재의 폭발로 이어집니다.

AlexNet 768x239
AlexNet

Google X 연구소는 16,000 대의 컴퓨터 클러스터에서 실행되는 DNN을 구축하여 YouTube의 1,000 만 개의 이미지를 기반으로 고양이를 인식했습니다.

GoogleX Cat 768x492
GoogleX Cat과 Andrew Ng


2013

딥마인드(DeepMind)라는 영국의 딥러닝 스타트업은, Atari 게임에서 인간을 이길 수 있도록 Deep Reinforcement Learning 모델을 설계했습니다.

Atari Games

아타리 게임


2014

페이스북은 인간처럼 사람을 인식 할 수있는 DeepFace DNN을 개발합니다.

Google은 DeepMind를 인수합병 했습니다.


2015

Amazon은 Amazon Machine Learning을 출시했습니다.

Microsoft는 GPU 및 컴퓨터 클러스터에서 머신러닝(ML) 문제를 효율적으로 해결할 수 있는 프레임워크/ DMTK (Distributed Machine Learning Toolkit) 를 발표했습니다.

엘론 머스크 (Elon Musk)과 샘 알트만 (Sam Altman)은 비영리단체인 OpenAI 를 설립하여, 인공지능(AI)이 인류에 긍정적인 영향을 미치게 한다는 것을 목표로 10 억 달러를 제공했습니다.


2016

Microsoft는 자사의 오픈 소스 심층 학습 툴킷 인 Computational Network Toolkit (CNTK)을 출시했습니다 .

Google의 AlphaGo/알파고가 바둑 천재 이세돌과 시합하여 이겼습니다. 알파고의 알고리즘은 이전에는 볼 수 없었던 창조적인 수의 기보를 보여주었습니다.


2017

Google은 TensorFlow를 발표 합니다.

Microsoft는 자사의 오픈 소스 심층 학습 툴킷 인 Microsoft Cognitive Toolkit (이전 CNTK)을 출시 했습니다 .

오늘날 우리는 인공지능(AI)에서 세 번째 폭발을 경험하고 있습니다. 이것은 발대한 양의 데이터와 직면한 문제들을 완전히 새로운 효과적인 방법으로 해결 할 수 있게 해줍니다. 이는 완전히 새로운 시장을 창출하고 중소기업 및 대기업의 전략에 큰 변화를 일으키고 있습니다.

증가하는 데이터 볼륨으로 인해 과학자와 연구원을 한동안 바쁘게 할 것이며, 이들은  특이점에 도달 할 때까지 획기적인 새로운 아이디어들을 계속 떠올릴 것입니다.

제 3의 겨울이 오지 않느냐구요? 그럴 수 없습니다. 왜냐구요? 기술의 채택과 실질적인 결과가 목에 다다랐기 때문입니다.


참고문헌


'4차산업 > 머신러닝&딥러닝' 카테고리의 다른 글

Tensorflow GPU 환경구축  (0) 2018.04.03
[링크] 머신러닝,딥러닝  (0) 2018.04.03
머신러닝의 역사  (0) 2018.04.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

KISIA 사전설문 

'보안 > 시큐어코딩' 카테고리의 다른 글

Kali(칼리)리눅스에 WebGoat 8 설치하기  (0) 2018.12.06
Canonicalization(정규화)  (0) 2018.11.20
KISIA 시큐어코딩 사전설문 링크  (0) 2018.03.14
금융보안원 설문지 링크  (0) 2018.03.06
BSIMM은 무엇?  (0) 2018.03.05
[Angular JS] 앵귤라JS 시큐어코딩  (0) 2018.01.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

설문지 링크:

https://goo.gl/forms/m6MY7QFPgPRFQC4u2

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

BSIMM은 무엇?



소프트웨어 보안의 측도 BSIMM(Building Security In Maturity Model)



소프트웨어가 안전한가? 안전하다면 얼마나 안전한 걸까? 에대해 많은 이들은 수치화 하여 보여 주기를 원한다. 이 요구사항을 충족시켜주는 보안 활동중의 하나가 BSIMM(비심이라고 읽으면 됨) 이라고 볼수 있다.  BSIMM은 단순 관찰과 보고 기능만 수행하는 소프트웨어 보안의 측도라고 할 수 있다.


BSIMM은 수년에 걸친 78개 기업(금융서비스-33, 독립소프트웨어 공급업체-27, 가전제품-13, 의료-10 일부중첩된 경우도 있음)들로 부터 얻은 데이터를 분석한 실제 소프트웨어 보안 계획에 대한 연구결과이며, 서로 다른 기관들의 실천과제를 수량화하여 다수의 기관들에서 나타나는 일반적인 근거와 각각의 기관들의 고유한 계획을 측정한 것이다.  


즉 BSIMM은 소프트웨어 보안의 "현재상황"을 수치화해서 보여주는 것이다.



2008년 첫번째 버전부터 시작해서 현재 6번째 버전인 BSIMM6을 적용하고 있다. 어떤 기술이든 용어에 대한 정의가 중요하다. 이 문서가 무엇을 말하고 있는지 어떻게 이해해야 하는지에 대한 정의이기 때문이다.



BSIMM 에서 사용하는 용어


SSG(소프트웨어 보안 그룹): 소프트웨어 보안을 실행하고 원활하게 진행되도록 전담하는 인력들이다. 아마도 보안 계획의 첫번째 단계는 우수한 SSG를 구성하는 것이다.



SSF(소프트웨어 보안 프레임워크): 소프트웨어 보안활동의 기본 틀이다. BSIMM은  4개도메인에 12개의 실천과제로 구성된 프레임워크를 사용한다.


SSDL(시큐어 소프트웨어 개발 생명주기): 통합 소프트웨어 보안 체크 포인트 및 활동이 포함된 모든 소프트웨어 개발 생명주기를 의미한다.


SDL(시큐어 개발 생명주기): 마이크로소프트에서 자사의 소프트웨어를 안전하게 개발하기 위해 적용한 개발방법론이다.


활동 : 실천과제의 일환으로 SSG에서 수행하거나 진행시키는 활동


실천과제 : BSIMM의 SSF는 4개의 도메인으로 구성되고,  

              각 도메인은 3가지의 실천과제로 구성되어 있다.


도메인 : 관리, 정보, SSDL 접점 및 전개로 나뉜다.





BSIMM6의 구조


4도메인, 12개의 실천과제로 구성 되어 있다.




Goverance : 소프트웨어 보안 계획의 구성 및 관리, 측정  관련 활동.

                 인력개발도 주요 실천과제중의 하나이다.


Intelligence : 조직전반에서 소프트웨어 보안 활동을 수행하는데 사용된 기업정보 수집관련 활동 

                 선제적 보안지침과 조직 위협모델링이 포함된다. 


SSDL Touchpoints : 특정소프트웨어 개발 산출물 및 프로세스의 분석, 보증 관련된 활동 

                 모든 소프트웨어 보안 방법에는 이 실천과제들이 포함 된다.


Deployment : 네트워크 보안 및 소프트웨어 유지보수 조직과 소통 관련 활동

                 소프트웨어 보안에 직접적인 영향을 미치는 소프트웨어 구성 및 유지보수, 기타 환경문제가 포함 된다.




BSIMM7.PDF(영문) 다운로드 :   BSIMM7.pdf


BSIMM6.PDF(한글) 다운로드 :   eNsecure_BSIMM6_kor.pdf


블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바