RSA 공격법 : Coppersmith’s attack

다섯 명의 보안 연구자들이 CVE-2017-15361 라는 연구보고서[1]를 발표했는데, 이름하여 the Return of Coppersmith’s Attack (줄여서 ROCA) 라고 이름 붙였다고 한다. 이게 뭔 소린가-_- 싶어서 이리저리 검색해봤다. RSA를 공격하는 여러가지 방법들 중에 Coppersmith’s attack이라는 유명한 방법을 응용한 어떤 방법 같다. Synopsys라는 회사의 홈페이지[2]에 설명이 꽤 상세하니 참고할만 하다.

현재 ROCA에 영향받는 시스템의 숫자가 상당하다[2,3]고 하는데, 벌써 공개키값을 입력하면 취약성을 판단해주는 사이트[4]도 있다. 마이크로소프트의 윈도우즈 제품들에도 영향이 있다는데, 마이크로소프트 측에서는 이번 CVE-2017-15361에 대한 보안 권고문 ADV170012[5]도 발간한 모양이다. 집에 있는 공유기 등등 여러 전자제품들은 웬만하면 OS패치는 꼬박꼬박 해두자-_-

1996년에 Don Coppersmith라는 보안 전문가가 정수계수의 degree n인 monic polynomial이 주어질 때, 0부터 M^{1/n}의 범위 안에 up to mod M으로 모든 root를 찾는 다항식 시간 알고리즘을 발표했다고 한다. 이름하여 Coppersmith method인데, 이 방법을 동원하면 RSA로 부실하게 암호화 할 때 root를 모두 파내는 작업이 가능한 모양이다.

RSA를 구현하려면 두 소수 p, q와 공개키 e값, 비밀키 d값을 결정해야 한다. 이 때, ed\equiv 1 \pmod{(p-1)(q-1)}가 성립해야 한다. 평문 메세지 M을 전송하려면 C\equiv M^e \pmod{pq}로 암호화한 C를 전송하고, C^d\equiv M \pmod{pq} 으로 복호화한다.

RSA 자체의 수학적 문제는 없지만, 사용하는 사람에게 문제가 발생할 수 있다. 일전에 소수 재사용 문제[6]와 유사하다고나 할까. ㅎㅎ 위키피디아의 Coppersmith’s attack 항목의 설명에 따르면, 컴퓨터 모듈러 연산의 속도를 위하여 e값으로 페르마 소수 F_0, F_2, F_4를 사용하는 경우가 많다고 한다. e값이 작고 평문의 길이가 매우 짧을 경우, 보통 pq의 값이 매우 크기 때문에 암호화 된 텍스트 값 C가 모듈러 연산에 몇 번 걸리지 않는 경우가 있다고 한다. 이 경우 C값을 그냥 e 거듭제곱근을 구해서 평문을 복호화해 낼 수가 있다.

또는 동일한 메세지를 다수의 청중에게 방송할 경우, 공약수를 파내는 방법과 중국인 나머지 정리를 쓰면 평문 메세지의 경우의 수를 꽤 크게 좁힐 수도 있는 것 같다. 이런 식의 다양한 RSA 공격 기법들이 알려져 있는 것 같은데, 이번 ROCA는 정확히 어떻게 공격하는지는 본인도 잘 모른다-_- [1]을 대충 봤는데, 원체 지식이 없다 보니… ㅋㅋㅋ

여하간 보안패치는 꼬박꼬박 하자는 교훈. ㅎㅎㅎ 지금 검색해보니 보안뉴스에도 관련 기사[7]가 있다.

 


[1] https://crocs.fi.muni.cz/public/papers/rsa_ccs17
[2] ROCA: Cryptographic flaws in BitLocker, Secure Boot, and millions of smartcards
[3] 포브스 ‘Worse Than KRACK’ — Google And Microsoft Hit By Massive 5-Year-Old Encryption Hole OCT 16, 2017 @ 10:41 AM
[4] https://keychest.net/roca
[5] https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/ADV170012
[6] 내 백과사전 Diffie-Hellman의 취약점 : 소수(prime number) 재사용 문제 2016년 12월 18일
[7] 보안뉴스 RSA 암호화 알고리즘에서 인수분해 취약점 발견 2017-10-18 10:56

Advertisements

오토튠의 탄생

미국 대통령은 연초에 1년간 국가의 운영방향을 제시하는 국정연설을 한다고 하는데, 2011년 오바마의 국정연설[1]이 명연설이라고 한다. (왜 명연설인지 이유는 잘 모르겠음-_-)

오토튠은 노래를 부른 음성의 피치를 교정하는 소프트웨어라고 하는데, 오토튠의 성능이 뛰어나서 이 국정연설을 가지고 음악을 만든 게 있다. ㅋ

The Gregory Brothers라는 오토튠으로 음악을 만드는 아티스트의 작품이라고 하는데, 나름 잘 만들었다-_- 나무위키[2]에도 설명이 있다.

여하간 강력한 성능을 가지고 있지만, 과거에는 이런 작업들을 구현하기 위해서는 연산량이 엄청나다고 생각해서 이런 작업들이 불가능하다고 생각했던 것 같다. 오토튠의 개발 스토리[3]가 해커뉴스[4]에 올라와 있었다. 글[3]이 상당히 긴데, 꽤 재미있다. 다만 기술적 배경에 대한 설명이 전혀 없어서 아쉽다. 뭐 어차피 본인은 시그널 프로세싱에 전혀 지식이 없긴 하다-_-

오토튠의 개발자 Andy Hildebrand는 위키피디아에 독립된 항목이 없는 걸 보면, 인지도가 높지는 않은 사람 같은데, 글[3]을 읽어보니 무척 흥미로운 인생을 산 것 같다 ㅋㅋㅋ 이 사람은 처음에 석유 시추를 위해 지진파를 연구하는 사람이었는데, 엑손 모빌이 5억 달러의 손해를 볼 뻔한 문제를 해결하고 회사를 나왔다고 한다. 이후에 Landmark Graphics라는 회사를 차려서 지진파 분석으로 땅속 지형을 분석하는 기술을 연구해서 나스닥에 상장하는 바람에 떼부자-_-가 되었다고 한다. 이후 은퇴해서 자기가 하고 싶은 음악 공부를 한 모양인데, 이거 완전 나의 롤모델이로구만-_- 초 부럽다-_-

여하간 글[3]에는 설명이 없지만 어떤 수학적 트릭을 써서, 과거에는 엄청난 연산량이 필요하다고 생각했던 음성 피치 변조 작업을 훨씬 적은 연산으로 구현하는데 성공해서, 오토튠이라는 소프트웨어를 만들었다는 이야기 같다. 근데 이런 이야기 볼 때마다 시그널 프로세싱 한번 제대로 공부해보고 싶은 마음이 굴뚝 같은데 능력부족이다 ㅋㅋㅋ 나중에 오토튠으로 엄청 유명해진 아티스트 T-Pain에게 고소도 먹고, 안티 오토튠 운동도 나오고 뭐 그렇다고 한다.

어쨌건 음악계의 혁신적 소프트웨어가 석유를 채굴하기 위한 지진파를 연구하던 사람에게서 나온 줄은 몰랐네 ㅋㅋㅋ 흥미로운 글[3]이라 함 포스팅해봄-_-

 


[1] https://www.youtube.com/watch?v=9ZdEmjtF6HE
[2] 오토튠 in 나무위키
[3] pricenomics The Mathematical Genius of Auto-Tune Sep 26, 2016
[4] https://news.ycombinator.com/item?id=15483145

라즈베리 파이로 RAID 0 만들어서 토렌트 머신 만들기

방에 오래된 짜투리 sd 카드들이랑 짜투리 저장장치틀이 몇 개 있는데, 용량이 애매~~~해서 어디 가져다 쓰기가 뭣하다.ㅋㅋ 이거 전부 한데 업쳐서 단일 대용량 장치로 만들어서, 토렌트 머신을 돌리고 samba 서버를 설치하면, 밤에 잘 때 다 받아 놨다가 스트리밍으로 누워서 보면 좀 편하겠구나 싶어서-_- 시도해 봤다. 라즈베리 파이니까 전기 요금도 별로 안 들 것 같은데, 같은 생각을 하는 사람이 원체 많은 건지-_- 검색하면 엄청 나온다. 걍 기록차원에서 포스팅함.

일단 라즈베리 파이는 설치는 다 됐다 치자. 어차피 서버니까 비디오 메모리 할당은 조금만 해 두면 좋다. 다음 작업들은 모두 관리자 권한(sudo)로 해야 한다.

일단 가지고 있는 저장장치는 라즈베리파이 os가 설치된 4G짜리 sd카드 외에, 16G, 64G, 128G용량의 sd카드 3개가 있고, 아주 구형 mp3플레이어에서 분리한 ZIF타입의 하드디스크 20G짜리 1개가 있다. 이걸 usb에 몽땅 달고
fdisk -l
이라 치면 연결된 디스크 목록이 나온다. 그 다음은 어느 친절한 사이트[1]를 통째로 따라함-_-
mdadm 설치 후 (apt-get install mdadm)

mdadm --create --verbose /dev/md0 --level=0 --raid-devices=4 /dev/sda1 /dev/sdc1 /dev/sde1 /dev/sdf1

라고 치니까 간단히 합쳐졌다. 초 쉽네-_-

참고로, RAID 0은 연결된 디스크들 중에 하나라도 고장나면 전체 데이터를 못 쓴다고 한다. 중요한 파일은 저장하지 말자.

포맷하고 (mkfs.ext4 /dev/md0) (시간 살짝 걸림)
마운팅 포인트 만들고 (mkdir /home/pi/raid)
권한 주고 (chmod 777 raid)
/etc/fstab에 다음 한 줄을 추가하고

/dev/md0     /home/pi/raid    ext4    defaults   1   2

마운팅 하면 (mount -a)

200기가 바이트의 디스크가 생겼다. ㅋㅋ 경로 같은 건 각자 수정하시라.

samba서버 설치하는 법은 다른 블로그[2]를 보고 따라했음. 그 다음 transmission 데몬을 설치하면 되는데, 이건 뭐 설명하는 사이트가 하도 많아서 생략. ㅋ

마지막으로
service transmission-daemon status
라고 치니까 무슨 UDP failed to set receive buffer 이런 에러 메세지가 뜨던데, 어느 사이트[3]에서 해결법이 나와 있었다.
/etc/sysctl.conf 파일을 열어서 맨 마지막에 다음 두 줄을 추가한다
net.core.rmem_max = 16777216
net.core.wmem_max = 4194304

예전에 라즈베리 파이로 삽질[4]한게 하도 많으니까 대충 봐도 다 이해 되는구만-_- 여하간 모든 장비를 구석탱이에 몰아 넣고 선 정리하면 완성! ㅎㅎㅎ 자유 소프트웨어가 좋긴 좋다. ㅋㅋㅋ 자유 소프트웨어 만세!!

 


2017.10.18
samba서비스는 디폴트로 쓰기 권한이 막혀 있다. 쓰기 권한을 얻으려면 /etc/samba/smb.conf 파일을 열어 [homes]항목 아래의 read only = yes 를 no로 바꿔주고 create mask = 0775, directory mask = 0775로 바꿔주고 서비스를 재시작 (service smbd restart) 하면 파일을 쓸 수 있다.
transmission의 web ui에 아이디와 비번으로 접속하기 번거로울 때는 /etc/transmission-daemon/settings.json 파일을 열어 “rpc-authentication-required”의 값을 false로 바꾸면 된다.

 


2017.10.22
아무 생각없이 라즈베리 파이를 확 껐다가 16G sd카드 하나가 맛이 가는 바람에 완전 생고생했다-_- 남은 다른 디스크들은 재마운트가 안 되는데 해결 방법은, 레이드 디바이스 정지 (mdadm –stop /dev/md0) 후 수퍼블럭을 제거 (mdadm –zero-superblock /dev/sda) 하면 됨.

 


[1] How to set up software RAID for Raspberry Pi in Funnyvale
[2] 라즈베리파이(Raspberry Pi) 삼바(Samba) 서버 만들기 (라즈비안 파일서버 설치방법) by 빌노트
[3] TRANSMISSION UTP AND UDP BUFFER OPTIMIZATIONS in Falks Blog
[4] 내 백과사전 Raspberry Pi 2를 구입하다 2015년 3월 14일

수학 교사를 위한 자바스크립트 트릭들

국내 수학교사/강사의 절대다수는 한/글을 워드 프로세서로 사용하고 있다고 추정한다. 여태 살면서 한/글 이외의 워드 프로세서를 사용하여 수학문제를 편집하는 수학 선생을 본 적이 없다-_- 혹시 있으면 댓글 함 달아 주시면 매우 감사하겠습니다. ㅋㅋㅋ

한/글에는 스크립트 기능이 있는데, 이게 자바스크립트랑 엄청 유사해서 자바스크립트의 트릭들이 다 적용된다. 이거 잘 쓰면 되게 편리한데, 지금까지 살아오면서 본인이 편리하다고 생각되지만 잘 모를법한 트릭들을 기록해 둔다. ㅋ

1. replace, RegExp 함수 대신 split, join 함수 쓰기

ㅌ=4ㅅ 라고 입력하면 x=4t 라고 짜잔! 하고 변환하고 싶은데 다음과 같은 루프를 쓰면 왠지 될 것 같다-_-

var k_list =['ㅁ','ㅠ','ㅊ','ㅇ','ㄷ','ㄹ','ㅎ','ㅗ','ㅑ','ㅓ','ㅏ','ㅣ',
'ㅡ','ㅜ','ㅐ','ㅔ','ㅂ','ㄱ','ㄴ','ㅅ','ㅕ','ㅍ','ㅈ','ㅌ','ㅛ','ㅋ',
'ㄲ','ㄸ','ㅃ','ㅆ','ㅉ','ㅖ','ㅒ'],
e_list =['a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v','w','x','y','z',
'R','E','Q','T','W','P','O'];

for(i=0;i<k_list2.length;i++)
{
	text=text.replace(RegExp(k_list[i], "g"), e_list[i]);
}

근데 ‘xy’라고 치면 ‘툐’가 되어버리므로 이래서는 곤란하다. k_list 목록에 ‘툐’ 같은 걸 추가하면 될 것 같은데, 이게 또 초성이 없는 조합들이 안 먹힌다. 예를 들어 ‘over’라고 치면 ‘ㅐㅍㄷㄱ’인데, 한/글은 초성이 없는 한글문자를 지원하므로 깨지게 된다. 이 경우 RegExp 함수의 문제 같은데, replace 함수 대신에 split, join을 사용하여 치환하는 트릭[1]을 사용하면 ‘ㅐㅍㄷㄱ’이 ‘over’로 깔끔하게 변형된다.

text=text.split(k_list[i]).join(e_list[i]);

2. Byte order mark 제거

위와 같은 트릭을 쓰려면 처음에 텍스트를 유니코드로 받아야 하는데, 한/글 스크립트 팁이라면서 인터넷에 널리 퍼져 있는 다음과 같은 코드는 작동하지 않는다.

text = GetTextFile("TEXT", "saveblock")

저 TEXT 부분을 UNICODE로 바꾸면 된다. 이 경우 텍스트 앞쪽에 Byte order mark가 첨가되어 텍스트 앞부분의 더미를 아무리 치환하려고 해도 제거가 되지 않는데, 이걸 몰라서 원인을 찾느라 열라게 삽질했다-_- 다음과 같이 코드를 사용하면 된다.

text = GetTextFile("UNICODE", "saveblock")
text=text.replace(/^\uFEFF(1\.  )?/, '');

3. indexOf의 정규식 사용

자바스크립트의 indexOf에는 정규식이 안 통하는데, search에는 통한다. 근데 search에는 특정 위치부터 검색을 시작하는 옵션이 없다. stack overflow에 누군가 아주 훌륭한 함수[2]를 올려두었으니 그대로 카피해 쓸 수 있다.

function regexIndexOf(text, re, i) {
    var indexInSuffix = text.slice(i).search(re);
    return indexInSuffix < 0 ? indexInSuffix : indexInSuffix + i;
}

4. 반올림 처리

대부분의 프로그래밍 언어에서 이진수의 특성 때문에 0.1 + 0.2를 하면 0.3이 안 나오는데, 심지어 웹사이트[3]도 있고, 이를 이용한 smbc의 개그[4]도 있다. ㅋㅋ

이런 특성이 자동 보기[5]를 만들때 곤란한 경우가 있는데, 어느 웹사이트[6]에 있는 다음과 같은 코드를 쓰면 된다.

function roundXL(n, digits) {
	if (digits >= 0) return parseFloat(n.toFixed(digits));		// 소수부 반올림

	digits = Math.pow(10, digits);					// 정수부 반올림
	var t = Math.round(n * digits) / digits;

	return parseFloat(t.toFixed(0));
}

5. 특정 문자의 대문자

수학문제에 확률변수 X라든가 선분 AB 같은 것들은 대부분 대문자를 쓰고 있는데, 자동으로 대문자로 뿅 변하면 무척 편리하다. ㅋㅋ 문자열의 특정 부분만 대문자로 바꾸는 트릭은 stack overflow[7]에 있다. 다음과 같이 pos에서 pos2 사이를 대문자로 만들 수 있다.

text = text.substring(0,pos) + text.substring(pos,pos2).toUpperCase() + text.substring(pos2);

6. right 자동 넣기

수식에 left … right를 많이 쓰는데 은근 치기 귀찮다. right가 없을 때만 right를 자동으로 넣는 정규식

text = text.replace(/left\s*(((?!right)[^\}])*)([\}\)\]])?$/,'left$1 right$3');

7. 이미지 사이즈 절대 크기

클립보드의 이미지를 스크립트로 붙여 넣을 때, 항상 사이즈를 50%로 하고싶으면

HAction.Run("Paste");
FindCtrl();
HAction.GetDefault("ShapeObjDialog", HParameterSet.HShapeObject.HSet);
with (HParameterSet.HShapeObject)
{
	Height = Height*0.5;
	Width = Width*0.5;
}
HAction.Execute("ShapeObjDialog", HParameterSet.HShapeObject.HSet);

라고 하면 될 것 같지만 안된다-_- 왜냐하면 붙여 넣는 순간에 한/글이 이미지 사이즈를 조정하여 원본 크기가 아니라 편집용지 크기에 맞춰 붙여 넣어 주기 때문이다. 이걸 해결 못해서 매번 손으로 삽질했는데-_- 다음과 같이 변경하면 된다.

	Height = ShapeDrawImageAttr.OriginalSizeY*0.5;
	Width = ShapeDrawImageAttr.OriginalSizeX*0.5;

8. 한/글의 미주 버그

커서가 미주 안에 편집 상태에 있을 때, 미주를 생성하는 스크립트 HAction.Run(“InsertEndnote”) 를 실행하면 에러가 나면서 한/글이 비정상 종료가 된다. 문서를 날려먹는 멘붕을 몇 번 겪은 끝에-_- 다음과 같은 트릭을 쓰면 방지가 가능하다는 걸 알았다.

if ( HAction.Run("InsertEndnote") )
{
//커서가 미주 밖
} else
{
//커서가 미주 안
}

 


[1] [javascript|자바스크립트] 특정 문자 모두 바꾸기 (replaceAll) 쉽게 사용하기 in 젠트의 프로그래밍 세상
[2] Is there a version of JavaScript’s String.indexOf() that allows for regular expressions? in stackoverflow
[3] http://0.30000000000000004.com/
[4] http://www.smbc-comics.com/?id=2999
[5] 내 백과사전 아래 한글 수식 관련 매크로 스크립트 2015년 8월 19일
[6] [자바스크립트] 실수로 반올림, 소수점 자릿수 지정, Round To Float, JavaScript in mwultong Blog
[7] How do I make the first letter of a string uppercase in JavaScript? in stackoverflow

아이패드 프로 12.9 (2세대)를 구입하다

아이돌 마스터 신데렐라 걸즈 스타라이트 스테이지‘[1] (약칭 ‘데레스테’)와 ‘아이돌 마스터 밀리언 라이브 시어터 데이즈(약칭 ‘밀리시타’)라는 모바일 게임을 자주 하는데, 하드웨어 사양을 상당히 타는 게임이라 인터넷에는 종종 기발한 개조를 하는 장면[2]들도 볼 수 있다. 일전에 구입[3]한 엑스페리아 z4 태블릿으로 플레이 하고 있었는데, 이놈의 화룡 810은 그 명성답게 너무 대단한 열을 내뿜어서 제대로 못하겠다-_- 화룡 810은 일상 용도로는 별 지장 없는데, 고사양의 게임을 좀 돌리면 대단히 뜨겁다. 손으로 뒷판 cpu부분을 수 초 잡으면 통증으로 인해 더 이상 버틸 수 없을 정도의 온도가 나온다-_- 은박지도 붙여보고 물주머니도 대 보고 하여간 별 난리 부르스를 쳐왔다.

여하간 더 좋은 하드웨어로 게임을 할 수 없을까 하고 궁리에 궁리를 하던 끝에 도달한 결론은 아이패드였다-_- 잡스 형 사후에 나온 아이패드들을 아주 싫어했기 때문에 고민을 열라 했는데, 현존하는 하드웨어 중에서 가장 좋은 퍼포먼스를 내려면 픽셀c 또는 아이패드 밖에 선택의 여지가 없다. 근데 픽셀c는 출시한지 2년이나 됐고 국내에서도 구하기가 쉽지 않아 부득이 게임용으로 아이패드를 살 수 밖에 없었다-_-

‘화면의 크기가 감동의 크기’라는 모니터 계(?)에서 떠도는 aphorism에 따라, 가장 큰 사이즈의 아이패드를 구입했다. 근데 사고 보니 스피커가 4개네? 밀리시타 할 때, 사람들 환성 소리가 입체 서라운드로 들려서 엄청나게 현장감 난다. ㅋㅋㅋ

데레스테 최고화질로도 문제없이 플레이 된다. 근데 본인 실력이 똥이라 성적의 변화는 없었다-_- 화면이 너무 커서 중앙에 의식을 집중할 때, 양 옆으로 떨어지는 노트에 반응하는 것이 어렵다-_- 젠장.. 오직 게임머신이 목적인데 잘못 산건가…-_- 다만 밀리시타는 더 좋다. 노트 위치가 6개나 되니 화면이 크면 간격이 넓어져서 쾌적하다. 근데 역시 성적의 변화는 없었다-_-

화면 크기가 크다보니 웹서핑 할 때, 가로로 들면 웬만한 노트북보다 웹사이트가 널찍하게 보인다. 누워서 웹서핑 하기 아주 좋다. ㅎ 누워서 책 읽을 때도 좋다.

3세대 패드[4] 시절에 사 놓은 앱들 중에 몇 개가 남아 있었다. 그 중에 한컴 오피스[5]가 남아 있어서 이걸 설치후, 3세대 패드[4]시절 쓰던 블루투스 키보드를 붙여서, 한번 문서작성으로 얼마나 효용이 있나 싶어 테스트를 해 봤는데… 역시 워드 프로세서는 익숙한 걸로 해야한다-_- ㅋ 태블릿이 노트북을 대체할 날은 영원히 안 올 거다.

 


2017.10.14
오늘 열라게 데레스테를 했는데, 화살표가 후두둑 떨어져도 입력이 시원시원하게 팍팍 들어가는게 확실히 사양이 좋긴 좋다. ㅋㅋㅋ 엑페 z4[3]는 게임 도중에 이상하게 뭔가 프레임이 확 떨어지면서 노트 입력이 하나도 안 맞는 상황이 종종 발생하는데, 여하간 말로 설명하기 힘든 뭔가 답답한 느낌이 있었는데, 아이패드는 그런게 없다. ㅎㅎ

 


2017.10.15
여태 화면이 커서 노트에 반응하기 어려운 줄 알았더니만, 그게 아니고 라이브 옵션 중에 ‘디머’를 끈 상태였다. 이거 켜면 엄청 잘 보임. ㅋㅋㅋㅋ 여태까지 한 번도 못 통과했던 콤보가 뚫린다!!! ㅋㅋㅋ 다행이다!!! 엄청 잘 되는 듯. ㅋㅋㅋ 사길 잘 했음 ㅋㅋㅋ

 


2017.10.17
다 좋은데, 일반 충전기로 충전하면 충전 속도가 어마어마하게 느리다-_- 처음 살 때는, ‘잘 때 충전하면 되지’라는 생각으로 추가 구입하는 고속 충전기를 안 샀는데, 자기전에 충전을 까먹으면 낭패다-_- 애플 이 쉐이들 고속 충전기를 왜 기본으로 안 넣어준 건지, 상당히 괘씸하다.

 


[1] 내 백과사전 아이돌 마스터 신데렐라 걸즈 스타라이트 스테이지 アイドルマスター シンデレラガールズ スターライトステージ 2017년 2월 10일
[2] [자랑] 데레스테를 위하여 패드를 개조해 보았습니다. in 루리웹
[3] 내 백과사전 소니 엑스페리아 z4 태블릿을 구입하다 2015년 6월 18일
[4] 내 백과사전 뉴 아이패드를 구입하다 2012년 4월 27일
[5] 한컴오피스 모바일 in appstore

한국어 word2vec 서비스

일전에 MIT tech 기사[1]에서 word2vec에 대한 이야기를 처음 들었을 때는, 이게 되겠나-_- 싶었는데, 이걸 한국어로 구현한 사이트[2]를 봤다. 개인이 제공하는 웹서비스다보니 일전의 시인 뉴럴[3]처럼 언제 닫힐지는 모르겠다. ㅎ

백그라운드 지식을 설명하는 사이트가 몇 개[4,5]있는데, tl;dr 했다-_- 사이트 주인에 따르면 위키피디아와 나무위키를 코퍼스로 사용했다고 한다. 근데 나무위키를 코퍼스로 사용하는 건 아무래도 실수 같은데…-_-

몰랐는데 검색해보니 word2vec이 성차별 논란에 휩싸여 있는 듯[6] 하다. 근데 이건 뭐 당연한 결과 같은데, 현실 언어에 성차별이 엄연히 있고, 그것을 가지고 학습을 했으니…-_- 한국어에는 host, hostess 처럼 성별 구분이 명확한 단어가 영어에 비해 적은 듯 하여 어떻게 될지 모르겠다.

여하간 몇 개 연산을 시험해 봤는데, MIT tech 기사[1]처럼 왕-남자+여자를 계산[7]해 보니 ‘국왕’이 나온다. ㅎㅎㅎ 본인이 해 본 시도로,

왕-남자+여자 = 국왕
국왕-남자+여자 = 술탄
아버지+어머니 = 아내
아버지-남자+여자 = 어머니
어머니-여자+남자 = 아버지
부모-여자+남자 = 어머니
부모-어머니 = 개도국
큰+작은 = 커다란
빨간+노란 = 파란
빠른+느린-빠른 = 굼뜬
케냐-나이로비+카이로 = 사마라
에베레스트-높은+넓은 = 안나푸르나

음… 성능을 떠나서 이런 전산 언어학적 방법이 얼마나 유용할런지는 조금 의문이다. semantic한 성질을 제대로 반영하는지도 의문이고…

 


[1] MIT technology review King – Man + Woman = Queen: The Marvelous Mathematics of Computational Linguistics September 17, 2015
[2] http://w.elnn.kr/search/
[3] 내 백과사전 인공지능 시팔이 : 시인 뉴럴 2015년 6월 8일
[4] word2vec 관련 이론 정리 by BEOMSU KIM
[5] Word2Vec in deeplearning4j.org
[6] MIT technology review How Vector Space Mathematics Reveals the Hidden Sexism in Language July 27, 2016
[7] http://w.elnn.kr/search/?query=%EC%99%95-%EB%82%A8%EC%9E%90%2B%EC%97%AC%EC%9E%90

인공지능 Zo는 리눅스를 좋아하나?

마이크로소프트가 인터넷 트롤들 때문에 망한[1]-_- tay를 버리고, 새로 zo[2]를 론칭한 모양인데, 이 인공지능 친구가 윈도우즈 보다 리눅스를 더 좋아한다-_-는 기사[3]를 봤다. ㅋㅋ

이런 배은망덕한 자식을 봤나-_-ㅋㅋㅋ 싶어서, 페이스북 메신저로 본인도 직접 기사[3]와 똑같은 질문 “do you like windows?”라고 물으니 “Yeah I do actually. I run Windows 10 on my Gaming PC.” 라고 대답한다. 아무래도 마이크로소프트에서 수정을 한 것 같다. ㅎㅎㅎㅎ

심심한 분들은 zo에게 씰데없는 질문을 하며 놀아도 될 듯. ㅎㅎ 참고로 홈페이지[4]도 있다.

 


[1] 연합뉴스 인공지능 세뇌의 위험…MS 채팅봇 ‘테이’ 차별발언으로 운영중단(종합2보) 2016/03/25 08:19
[2] https://www.facebook.com/zo/
[3] omgubuntu Even Microsoft’s AI Chatbot ‘Zo’ Prefers Linux 15 HOURS AGO
[4] https://www.zo.ai

Microsoft Station Q : 마이크로소프트의 양자컴퓨터 연구랩

2년전에 이코노미스트지 기사[1]에서 필즈상 수상자인 Michael Freedman 선생이 마이크로소프트의 지원을 받아 양자컴퓨터를 연구하고 있다는 소식을 들은 적이 있다. 이 소식이 어찌됐나 까먹어가던 차에, 마침 정보통신기술진흥센터에서 발간하는 주간기술동향 기사[2]를 보니, 흥미롭게도 마이크로소프트가 타사에 비해 어떤 기술적 우위를 점하고 있는 듯한 소식이 들린다. 헐, 진짠가?

몰랐는데, Freedman 선생이 설립한 랩 이름이 Microsoft Station Q라고 한다. Station Q의 홈페이지의 소개[3]에 따르면, Freedman 선생이 연구를 나름 오래전부터 생각해오고 있었는 듯.

Freedman 선생은 토폴로지 쪽에 업적이 있는 사람이라고 알고 있는데, 마이크로소프트에서 연구하고 있는게 바로 topological quantum computer라고 한다. 뭐 본인은 topological quantum computer와 그냥 quantum computer가 뭐가 다른지도 모르겠다-_- 뭔가 토폴로지의 백그라운드가 사용되는 듯. ㅋ 이코노미스트지[1]에 anyon 등등의 나름 자세한 설명이 있으나 뭔 말인지 모르니 넘어갑시다.

주간기술동향의 기사[2]에서는 궁극적인 응용의 범위만 설명하고 있을 뿐, 어떤 측면에서 기술수준이 앞서있는지에 대한 단서는 별로 없어서 실망이다. 다만 설명들이 너무 좋은 이야기들만 늘어놔서 모두 신뢰하기 어려울 정도다. Too good to be true. 나름 재미있으니 일독을 권한다. 뭐 여하간 구글과 나사에서 D-wave의 양자 컴퓨터를 산다고 설치더니만[4] 마이크로소프트가 한 발 앞서는 듯 한 느낌을 준다.

여하튼 마이크로소프트가 기술적으로 앞서고 있는게 사실이라면, 대단하구만 Freedman 선생!! 필즈상이 미래에 업적을 이룰 사람에게 주는 격려상이라는 취지로 볼 때, 매우 수상자격이 있다고 생각한다. Cédric Villani씨는 필즈상 수상 이후에 공부는 안 하고 마크롱 팀에 들어가서 정치하려는 것과 대조되는 듯-_- 얼마전에 69% 득표로 국회의원에 당선된 듯 하다.[5,6]

뭐 여하간 미래는 어찌될지 모를 일이지만, 어쩌면 컴퓨터 자체가 여태까지의 실리콘 베이스에서 전혀 다른 구조로 변하는 혁신의 시초가 될 지도 모를 일이니 좀 더 관심있게 관찰해 볼 일인 것 같다.

 


2017.6.27
Quantum Computing: A beginner’s notes and overview of IBM’s Quantum Experience in IBM blog

 


2017.9.26
지디넷 MS, 양자컴퓨터용 프로그래밍 언어 만들었다 2017.09.26.12:05

 


[1] 이코노미스트 A little bit, better Jun 20th 2015
[2] 주간기술동향 1796호(2017.05.17 발행) MS의 양자 컴퓨터 개발, 양자 알고리즘 연구에서 타사에 우위 (pdf)
[3] https://stationq.microsoft.com/about-stationq/
[4] 내 백과사전 양자 컴퓨터가 실용화 될까? 2013년 5월 18일
[5] https://plus.google.com/+TerenceTao27/posts/cSQAfZCUyNV
[6] http://www.villani2017.eu/

Convolutional neural network로 애니메이션 동화 만들기

2D 애니메이션 제작과정에서, 원화와 원화 사이에 움직임을 부드럽게 만들기 위해 중간단계의 프레임을 구성하는 이미지를 삽입하는 것을 Inbetweening(中割り)이라고 한다. 본인은 애니메이션 제작에 문외한이지만, 원화 작가가 따로 있어 이를 그려서 넘겨주면, 동화 제작자가 중간프레임을 만들어 메우는 걸로 알고 있다. 이게 꽤나 노동집약적 작업인 것 같은데, 동화 제작자들이 저임금 열정페이로 버티는 열악한 이야기를 여러 번 들은 적[1]이 있다.

ねとらぼ 기사[2]에 CNN을 이용하여 애니메이션의 원화가 주어졌을 때, 동화를 자동생성해주는 연구[3]를 소개하고 있는데, 잘 연구하면 이런 노동집약적 작업을 대체할 수 있지 않을까 하는 생각이 든다. 근데 아카이브에 올라온 논문[3]을 막상 보려고 하니 일본어로 돼 있어 상당히 급 당황했다-_- 어차피 이런 연구를 읽어 볼 사람은 일본인 뿐이라는 건가-_- 뭐 여하간 본인은 CNN에 대한 배경지식이 없어서 어차피 이해가 안 되는 건 마찬가지라 ㅋㅋㅋ 아, 공부 좀 해야 되는데, 게을러서…-_-

유튜브에서 작업 예시물[4]을 직접 볼 수 있다.

프레임이 많아져서 모션이 부드러워짐을 확인할 수 있다. 근데 중간중간에 그림이 좀 깨지는 듯 한 부분이 있는 것 같기도….

위 애니메이션의 원화는 ‘아이돌 사변'[5]이라는 애니메이션에서 제작 협조를 받은 것 같다.[6] 본인은 잘 모르는 애니메이션이라 패스-_-

 


2017.9.29
선으로 된 원화를 주면 채색을 자동으로 해 주는 프로그램을 어느 사람이 만든 듯[7,8]하다. 정황상 중국인인 듯. 예시를 보니까 성능이 무척 좋은 것 같은데 본인은 사용할 줄 모름-_-

 


[1] 일본 애니메이터의 열악한 상황에 대한 기사가 또 실렸군요. in 고독한별의 순수한♥망상★놀이터
[2] ねとらぼ ドワンゴがディープラーニングを用いたアニメ中割り実験の論文を公開 スローモーション演出などへの活用に期待 2017年06月14日 23時35分
[3] Yuichi Yagi, “A filter based approach for inbetweening”, arXiv:1706.03497 [cs.CV]
[4] https://www.youtube.com/watch?v=_RM1zUrY1AQ
[5] 아이돌 사변 in 나무위키
[6] https://twitter.com/idol_jihen/status/874886607765213184
[7] https://lllyasviel.github.io/
[8] https://github.com/lllyasviel/style2paints