A random element in a python list can easily extracted with a newly added module called "secrets".

Without secrets module, you may consider a code as show below.


import random

alist= [1,3,4,5,3,2,1]

n = random.randint(0, len(alist)-1))

print(alist[n])


There is no problem in acheiving the goal, but it does not seem pythonic.

In python 3.6, a module called "secrets" was added. It describes as below.


"The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets."


Using the secrets module you can shorten the codes 2/3 as below. 


import secrets


alist= [1,3,4,5,3,2,1]

print(secrets.choice(alist))


It looks much better, cleaner so pythonic.






리스트에서 무작위로 배열안의 멤버를 추출하는 법을 소개한다.


아래처럼 random모듈로 난수(정수)를 발생시켜 추출하는 방법이 있다.


import random

alist= [1,3,4,5,3,2,1]

n = random.randint(0, len(alist)-1))

print(alist[n])


위 처럼 해도 무작위로 추출하는데 문제는 없다마는 코드가 조잡하고 알아보기 어렵다. 


python3.6에서 secrets 모듈이 새로 생겼다. 암호학 적으로 훨씬 좋은 난수 발생기라고 한다.


"The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets."


import secrets


alist= [1,3,4,5,3,2,1]

print(secrets.choice(alist))


코드가 3줄에서 두 줄로 줄었고 훨씬 보기 좋다.







뉴욕타임즈를 읽다가 유용한 표현이 나와서 공유합니다.

"그건 단지 형식일 뿐이야" 를 영어로 하면?


NYT 의 2016년 12월18일 자 기사 "The Electroal College Meets Monday. Here's What to Expect" 의 내용 중 일부입니다. 

미국에는 대선이 끝난 후 6주 뒤, 각 주별로 선거인단이 모여서 대선 승자를 확정하는 절차가 있나 봅니다.  뭐 다들 아시겠지만 미국대선의 경우 끝나기 전에도 전세계사람의 대부분은 누가 다음 미국 대통령이 될 지 알고 있습니다. 다만 이건 6주후에 해야하는 형식적 절차일 뿐이지요. 뉴욕타임즈에 이 표현이 나왔습니다. "단지 형식적인 절차에 지나지 않는다 = "It is little more than a formality"  이 표현이 제 눈에 들어왔습니다. 

WASHINGTON — On Monday, 538 people will meet to determine who will be the next president.

"These meetings of the Electoral College, convened in every state and the District of Columbia just shy of six weeks after Election Day, have long been little more than a formality."

These meeting of the Electoral College, 각주와 DC에서 대선 후 6주 후에 소집되는, 단지 형식적 절차에 불과하다.  

formality 라는 단어를 살펴보기전에 또 주목해야 할 표현이 있지요. "A is little more than B" 이라는 표현은 "A는 B보다 조금도 더 크지 않다" 즉 "A는 B에 불과하다" 라는 표현으로 보시면 되겠습니다. 만약에 "A is a little more than B"라고 했다면 뜻은 확 달라지죠. A는 B 보다 조금 더 크다" 라는 의미로 해석됩니다. 이런건 표현은 듣고 알아듣기가 힘들지요. 듣고 알아들을 때는 문맥상 알아들어야 할 때가 많습니다. 

응용을 해볼까요. 

그 절차들은 그냥 형식적 절차야. 
The procedures are not more than a formality
little more than 을 no more than으로 대체해 보았습니다. 더 알아듣기 쉽죠? 
저같이 네이티브 스피커가 아닌 사람들은 이런 표현을 사용하기가 훨씬 수월할 겁니다. 

혹은 

The procedures are just a formality 
더 단순한 표현이죠. 이럴 땐 어투가 좀 중요할 것 같습니다. 별로 중요하지 않다라는 느낌을 주는 어투로 말해야겠.




"현장에서 사로잡다 or 현장에서 잡다. "를 영어로 하면?

주로 수사기관에서 범인을 잡을 때 현행범을 잡다. 라는 표현을 씁니다. 이는 나쁜 짓을 한 후 시간이 지난 후에 체포하는 것이 아닌 그 자리에서 바로 체포하는 것을 의미합니다. 이를 영어로 표현할 할 때는 "catch someone in the act" 이라고 하면 됩니다.

응용을 해볼까요?

The police catch him in the act of stealing her money: 경찰은 그녀의 돈을 훔치는 그를 현장에서 체포했다.

수동태로 가보면...

He was caught in the act of stealing her money.

Usual Suspect라는 영화를 오랜 만에 보다가 갑자기 이 표현이 나와서 찾아봤어요.


두바이 정부의 '스마트 두바이' 관계자 Aisha Bin Bishr는 두바이 정부가 2020년까지 세계 최초로 전 도시의 블록체인(blockchain)화를 이루겠다고 발표했다. 이에 대해 과거 조그만 어촌에서 지구촌의 금융허브로 성장한 두바이가 또 다시 찾아오는 큰 변화의 물결을 준비하는 것이라고 WSJ은 긍정적으로 평했다.

전 도시의 블록체인화란 무엇일까?

블록체인이라는 용어를 한번 쯤은 들어 보았을 것이다. 최근 가장 핫한 가상화폐인 비트코인을 실현 시킨 기술이다. 비트코인이 가동되는 비트코인-블록체인은 2008년 최초로 만들어진 블록체인이고 현존하는 최대의 블록체인이지만 유일한 블록체인은 아니다. 현재 여러 종류의 블록체인이 존재하고 있으며 이 글을 읽고 있는 여러분도 고도의 프로그래밍 능력을 가지고 있다면 자기 자신만의 블록체인을 개발 할 수도 있다. 이처럼 두바이 정부는 자기들만의 블록체인 시스템을 만들겠다고 하는 것이다.

전 도시의 블록체인화를 알아보기 전 블록체인이란 무엇인지 부터 알아보자. 블록체인 기술이 4차 혁명을 일으킬 선봉장이라고들 모두들 말한다. 가장 핵심적인 이유는 블록체인은 거래 당사자들 사이에 존재하는 중개자를 완전히 없애 준다는 점에 있다. 보통 우리는 전혀 모르는 제 3자(untrustedd party)와 중요한 거래를 할 때 거래 안전성을 확보하기 위해 중개자를 고용한하고 상당한 대가를 지불한다. 돈을 송금할 때는 은행을 고용하고 부동산을 사거나 팔 때는 부동산 중개사를 고용한다. 또한 계약을 할 때는 변호사의 도움을 받고 기업은 은행에서 대출 받을 때 공인회계사의 도장을 받은 재무제표를 제출해야 한다. 하지만 블록체인 기술을 도입하면 위에 언급된 중개자들의 역할은 없어지고 자연스럽게 거래비용은 감소하고 거래 속도는 증가하게 된다.

비트코인이 어떻게 작동하는지를 이해하면 블록체인의 개념을 보다 쉽게 알 수 있다. 당신이 비트코인의 주소를 만들면 난수로 된 긴 Pulbic Key와 Secret Key를 받게 된다. 여기서 Public Key는 여러분의 비트코인 주소다. 이메일 주소와 비슷한 개념으로 누군가 당신에게 비트코인을 전송하기 위해서는 이 주소로 보내야 한다. 이름 그대로 누구에게나 공개된 키이다. 하지만 Secret Key는 주소의 소유자만 알고 있어야 하는 중요한 키다. 왜냐하면 Secret Key는 그 주소에 있는 비트코인을 전송할 수 있는 인증키이기 때문이다.

당신이 비트코인 주소를 만든 후 그 주소에 예치된 비트코인을 제 3자에게 보내는 거래를 생각해보자. 제 3자에게 비트코인을 전송할 때 당신은 Public Key와 Secret Key을 결합하여 특정한 "암호문"의 형태로 "내가 아무개에게 1BTC을 보냅니다."라는 사실을 비트코인-블록체인에 발표한다. 그럼 비트코인-블록체인에 존재하는 랜돔으로 선택된 누군가가 공포된 암호문이 정말로 당신의 Secret Key로 만들어진 암호문인지 암호문과 Public Key를 참고해 수학적으로 검증한다. 해당 거래가 유효한(Valid) 거래인지를 수학적으로 검증하는 절차이다. 이 검증이 문제 없이 완료되면 당신이 공포한 거래는 정식으로 비트코인-블록에 기록되고 영원히 블록에 남게 되어 거래가 완료되는 것이다. 이러한 거래들이 여러 개 묶여서 10분에 한번 씩 생성되는 블록에 기록되고 그 블록들이 체인에 묶여 영원히 사라지지 않는다고 해 이 기술을 블록체인이라고 부르는 것이다. 이렇게 기록된 블록들은 실시간으로 전 블록체인 멤버들에게 공유된다. 이 때 당신의 암호문을 검증하는 사람을 비트코인 마이너(miner)라고 하며 그런 행위를 "비트코인을 캔다"라고 한다. 검증을 하는 사람에게 약간의 비트코인 거래를 검증하게 할만한 인센티브 시스템을 만듬으로서 비트코인-블록체인이 원활하게 돌아가게 하는 것이다.

블록체인의 꽃은 중요한 것은 검증 작업이다. 이 검증은 흔히 생각하는 단순 계산기나 일반 개인용 컴퓨터로 할 수 있는 수준이 아니고 엄청난 컴퓨팅 파워를 가지고 있는 비트코인 채굴 전용 컴퓨터로만 가능하다. (참고로 비트코인 초기에는 채굴 난이도가 낮아 일반 PC로도 가능했지만 현재는 워낙 경쟁이 심해 일반 컴퓨터로는 채굴 근처에 가지도 못한다.) 이 검증 작업에서는 그 암호문이 당신의 Secret Key로 만들어진 암호문이라는 것 여부만 확인 할 수는 있을 뿐 Secret Key가 무엇인지는 알기는 사실 상 불가능하다. 즉 암호문이 유효한 것인지 Yes or No만 검증할 수 있을 뿐  Secret Key에 대한 정보는 알아내는 것이 사실상 불가능하다. (사실상 불가능하다는 뜻은 가능하긴 한데 엄청난 자원과 엄청난 컴퓨팅 파워가 필요해 Secret Key를 알아내는 비용이 그 효익을 초과한다는 뜻이다.) 따라서 검증이 완료된 후에도 Secret Key는 여전히 당신만 알고 있게 되는 것이다. 이런 식으로 블록체인 내 구성원들 끼리 일방향성 수학적 암호문을 이용해 검증하는 방식으로 거래가 이루워지기 때문에 중개자가 필요가 없다. 다만, 비트코인 마이너에게 제공하는 상대적으로 낮은 금액의 비트코인 수수료만 있을 뿐이다.

아직 상용화가 되지는 않았지만 딜로이트, IBM 등 다국적 회사들은 앞다투어 여러 분야에 블록체인 도입을 시도하고 있다. 하지만 정부기관이 나서서 도시 전체를 블록체인화 하겠다는 계획을 밝힌건 두바이가 처음이다. 비트코인은 블록체인 기술을 이용한 최초의 발명품으로서 10년 가까이 안정적으로 운영되고 있다. 이러한 사실은 블록체인 기술이 가상화폐 뿐 아니라 다른 분야에도 효과적으로 이용될 수 있다는 사실을 암시하고 있다. 블록체인 기술은 가상화폐에만 사용할 수 있는 것이 아니고 재고 추적, 스마트 계약서, Initial Public Offering(IPO), 부동산 등기부등본, 각족 자격증명서 발부, 국제자본거래 등 적용할 수 있는 부분이 무궁무진하다는 것이 전문가들의 일치되는 의견이다. 블록체인 기술로 하나의 거대한 값싸고 안전한 데이터베이스를 만들 수 있다는 것이다. 두바이는 이런 블록체인 기술을 이용해 현재 까지 종이로 이루어지는 계약을 블록체인을 사용한 스마트 계약서로 바꾸고 각 사업자 등록 그리고 자격증 발급과 같은 공공기관에서 이루어진는 모든 절차를 블록체인화 하겠다고 밝혔인 것이다.

15호F 65.1x53.0cm
수채화  Watercolor on arches


15호M  65.1x45.5
수채화 Watercolor on arches

10호M 53.0x33.4cm
수채화 Watercolor on arches


15호F 65.1x53.0cm
수채화 Watercolor on arches

비트코인은 블록체인을 기반으로 작동한다는 사실은 대부분 알고 있을 것이다. 그럼 좀 구체적으로 비트코인은 블록체인 체제 하에서 어떻게 채굴이되고 전송이 되는 것인가? 이 쪽 분야에 지식이 없는 사람은 몇번 돌려 보고 생각도 좀 해봐야 이해가 될 수도 있다. 하나씩 하나씩 나누어 알아보자. 이번 포스트에서는 Hash Function(해쉬함수)이 무엇인지 정리해 보겠다.

Hash Function (해쉬함수)

해쉬함수는 비트코인이나 블록체인에 국한된 개념은 아니다. 즉 정보보안 분야에 널리 쓰이는 개념이다. 가장 흔한 예를 한번 들어보겠다. 여러분들이 어떤 웹페이지에 회원가입을 할 때 패스워드를 타이핑 해 본 적이 있을 것이다. 이 패스워드가 여러분들이 기입한 그대로 상대 웹서버로 전달되어 웹호스트의 데이터베이스에 저장된다고 가정해보자. 이 경우 어떤 해커가 그 웹서버와 그 데이터베이스를 공격한다면 고스란히 당신의 패스워드는 해커의 손에 들어갈 것이다.

이 문제를 해결하기 위해 보통 여러분들의 비밀번호는 암호화 해서 저장된다. 이 때 암호화에 사용되는 것이 Hash Function이다. Hash Function은 보통 y=h(x)로 표현한다. 여러분이 입력한 비밀번호가 x이고 그 비밀번호가 Hash Function을 통해 변형된 후 웹호스트 데이터 베이스에 저장되는 값이 y이다. y는 고도로 암호화 되어 산출된 값이기 때문에 해커가 데이터베이스에 저장된 y의 값을 알아내더라도 당신의 패스워드를 알아내기란 사실상 불가능하다. 그리고 해커는 y만 가지고는 당신의 계정에 로그인할 수 없다. 이렇게 여러분의 비밀번호가 보호되는 것이다.

암호화에 사용되는 Hash Function의 특징은 다음과 같다.

1. 입력한 비밀번호의 길이에 관계 없이 일정한 길이의 y가 산출된다.

2. 같은 x 값에 대해서는 동일한 y가 출력되지만 약간이라도 변형된 x가 입력되면 완전히 다른 y가 산출된다.

파이썬이라는 프로그램을 통해 Hash Function에 대한 예를 들어보겠다.


위의 프로그램 결과를 보면 Smith, John 그리고 Jack의 좌측 비밀번호(x)의 길이는 서로 다르지만 Hash Function을 통해 산출된 우측 해쉬값(y)의 길이는 동일하다. 그리고 Smith와 John의 비밀번호(x)의 아주 약간의 차이에도 불구하고 해쉬값(y)는 완전히 다른 값이 산출되었다. 반면 동일한 비밀번호(x)에 대해서는 같은 해쉬값(y)가 산출된다. 단순 Random Generator는 아니라는 것이다.

데이터베이스에는 좌측 비밀번호(x)가 저장되는 것이 아닌 우측 해쉬값(y)가 저장되는 것이다. 해커가 데이터베이스에서 해쉬값(y)를 찾아낸다 하더라도 해쉬값(y)를 비밀번호(x)로 되돌리는 건 사실상 불가능하다. 이런 원리로 여러분들의 비밀번호가 보호되는 것이다.

이게 일반적인 정보보안, 그리고 비트코인 프로토콜에서 사용되는 해쉬함수의 기본적 개념이다. 이것이 비트코인 프로토콜에 어떻게 적용되는지는 다음 포스트에서 다루도록 하겠다.

+ Recent posts