안경잡이개발자

728x90
반응형

※ 어도비 클리너 소개 ※

 

  어도비(Adobe) 프로그램을 한꺼번에 제거할 때 사용할 수 있는 도구어도비 클리너(Adobe Cleaner)를 소개합니다. 말 그대로 포토샵, 프리미어와 같은 어도비 프로그램들을 한꺼번에 제거해주는 프로그램입니다.

 

  어도비 클리너는 Creative Cloud Cleaner라는 명칭으로 불리기도 합니다.

 

  이 프로그램을 사용하는 가장 큰 이유 중 하나는 어도비 소프트웨어 버전 업그레이드입니다. CS6, CS5 등 이전 버전의 소프트웨어를 사용하던 사람이 한꺼번에 CC 버전의 소프트웨어로 바꾸거나 할 때는 이전 버전의 프로그램을 한꺼번에 지울 필요가 있습니다. 아무튼, 자신이 사용하고 있는 어도비 소프트웨어를 한꺼번에 제거해야 한다면 효과적인 프로그램입니다.

 

※ 유의 사항 ※

 

  일단 사용 중이던 어도비 소프트웨어를 제거하는 경우에는 혹시나 자신이 작업하던 프로젝트 파일이 날아가지 않도록 하기 위해서 프로젝트 폴더를 백업해 둘 필요가 있습니다.

 

  일반적으로 어도비 제품군을 사용하시는 경우 아마 다음의 경로가 기본 프로젝트 경로일 것입니다. (이는 개인별로 확실하게 확인할 필요가 있습니다.) 어도비 프리미어 프로(Adobe Premiere Pro)를 사용하는 분이라면 아래 경로에 Premiere Pro라는 이름의 폴더가 있는 방식입니다. 따라서 이러한 프로젝트 폴더 자체를 저장해 둘 필요가 있습니다.

 

  ▶ 어도비 기본 프로젝트 경로: C:\Users\{사용자명}\Documents\Adobe

 

  예를 들어 저는 프리미어 프로를 쓰고 있으며 프로젝트 폴더를 바꾸지 않았기 때문에 아래 그림에 보이는 Premiere Pro 폴더에 각종 프로젝트 파일들이 저장되어 있습니다. 다시 말해 제가 지금까지 작업했던 모든 영상 편집 프로젝트들은 여기에 저장되어 있습니다. 따라서 혹시나 이전에 작업하던 영상 편집 작업물들을 날리고 싶지 않다면 이 폴더를 백업해 둘 필요가 있는 것입니다.

 

 

  저는 이 폴더가 총 13GB만큼이나 차지하고 있네요. 저는 이 파일들을 별도의 폴더에 백업해두었습니다. 또한, 어도비 공식 사이트에 의하면 다음의 경로에 있는 폴더도 따로 백업해두라고 하네요.

 

  ▶ CoreSync 경로: C:\Users\{사용자명}\AppData\Roaming\Adobe\CoreSync

 

  저는 아래와 같이 폴더가 구성되어 있는데요. 일단 시키는 대로 이것들도 다 백업해 두었습니다.

 

 

※ 어도비 클리너 설치 및 사용 방법 ※

 

  이제 어도비 클리너를 설치해서 사용해 봅시다.

 

  ▶ 어도비 클리너 경로: helpx.adobe.com/kr/creative-cloud/kb/cc-cleaner-tool-installation-problems.html

 

Creative Cloud Cleaner Tool을 사용하여 설치 문제 해결

Adobe Creative Cloud Cleaner Tool은 고급 컴퓨터 사용자를 위한 도구이며 이전 Adobe 소프트웨어 제거, 손상된 설치 파일 정리, Adobe 서버 연결을 위한 호스트 파일 수정 등 여러 가지 일반적인 문제를 해

helpx.adobe.com

 

  사이트 접속 이후에 자신의 운영체제에 맞게 설치 프로그램을 다운로드받습니다.

 

 

  이후에 클리너(cleaner) 프로그램을 [관리자 권한으로 실행]합니다.

 

  1. 영어(English)로 설명을 보기 위해 e를 누르고 엔터(Enter)를 누릅니다.

  2. 이후에 라이센스 관련 검토 메시지가 나오는데 수락하려면 y를 누르고 엔터(Enter)를 누릅니다.

 

  결과적으로 삭제할 앱을 선택하라는 메시지가 나오는데, 원하는 옵션에 맞게 선택한 뒤에 엔터(Enter)를 누르면 됩니다. 저는 CC와 CS6를 모두 제거하기 위해 3번을 선택했습니다.

 

 

  이어서 자신의 컴퓨터에 설치된 프로그램들이 등장하는데, 구체적으로 어떤 프로그램을 지울지 기입하면 됩니다. 저는 그냥 CS6와 CC 관련된 프로그램을 남김없이 삭제하기 위해 [Clean All]을 선택했습니다.

 

 

  제거가 완료되면 다음과 같은 화면을 만날 수 있습니다. 이후에 컴퓨터를 재부팅 하면 깔끔하게 어도비 프로그램들이 제거된 것을 확인할 수 있습니다.

 

 

※ 참고 ※

 

  참고로 중요한 파일을 모두 백업해 놓는 것이 좋습니다. 물론 실제로 어도비 클리너를 실행해 본 결과, 어도비 프로젝트 파일은 다음과 같이 그대로 남아있었습니다. 다시 말해 프로그램 파일만 제거하고 프로젝트는 남겨 놓는 것처럼 보이긴 합니다. 하지만 혹시 모르니까 클리너를 실행하기 전에는 꼭 백업 해놓아야 합니다.

 

728x90
반응형

728x90
반응형

최근에 메인보드가 고장 나서 수리 비용으로 거금 60만 원이 들었다. 아침에 먹던 사과즙이 노트북의 USB 포트로 흘러 들어갔던 것이다. 퇴근 후에 집에 돌아왔을 때 이미 내 노트북의 전원은 들어오지 않고, 배터리 충전기를 연결해도 충전이 되지 않는 상태였다.

확인해 보니 물이 들어간 상태에서 전원이 계속 공급되고 있었다는 걸 직감하게 되었고, 그로 인해 메인보드가 많이 부식되었고 IC 및 내부 회로가 손상 갔을 거라고 예상할 수 있었다. 메인보드 교체 비용은 최소 몇십만 원인 경우가 많아서 머리가 아팠다.


※ 노트북에 물을 쏟았을 때 대처 방법 ※

 

노트북에 물을 쏟은 것을 목격한다면, 일단 그 즉시 배터리 충전기를 뽑고 전원을 꺼야 한다. 그리고 가능하다면 (드라이버로 노트북의 아래쪽을 연 뒤에) 노트북의 내장 배터리를 분리할 필요가 있다. 그 뒤에 AS 센터에 방문하는 것이 정석이다.

 

기본적으로 각 부품이 물에 젖은 상태에서 전기가 통하면, 부품의 접점에서 부식이 발생하고 쇼트가 발생하여 메인보드가 완전히 고장 날 수 있다. 만약 키보드에 물에 쏟은 사실을 인지하지 못하고 있다가 나중에 발견했다면, 십중팔구 이미 메인보드는 저세상으로 가 있는 경우가 많다. (내가 그랬다.)

더불어 오렌지 주스와 같이 점도가 있는 액체인 경우에는 부품을 충분히 말렸다고 하더라도 여전히 잔재물이 남아있을 수 있기 때문에 위험하다. 따라서 이러한 경우에는 시간이 지난 뒤에 '이 정도면 말랐겠지'라고 생각하면서 노트북을 다시 켜기보다는 곧장 AS 센터로 가는 것이 좋다. 드라이기로 말린 뒤에 육안으로 다 말랐다는 생각이 들어 전원 스위치를 눌렀다가 문제가 더 심해지는 경우도 있다.

※ 노트북과 물 ※

 

노트북은 특히 물에 위험하다. 키보드 바로 아래에 메인보드(마더보드)가 위치하는 경우가 많기 때문이다. 실제로 드라이버로 노트북의 하판을 뜯어 보면 메인보드가 적나라하게 보인다.

 

또한 많은 사람이 간과하고 있는 위험 요소 중 하나로 노트북의 USB 포트나 배터리 충전 포트가 있는데, 여기도 생각보다 구멍이 크기 때문에 조심할 필요가 있다. USB 포트의 경우 구멍이 커서 노트북 근처에 놓은 물통의 물이 모종의 이유로 USB 포트로 들어가서 메인보드 쇼트가 발생하거나 부품이 부식되는 경우도 있다.

 

아래 사진은 삼성 Always 9 노트북 기종의 USB 포트 예시다.

 

출처: https://www.notebookcheck.net/

 

또한 노트북 부품을 점검하는 과정에서 메인보드를 꺼내서 작업하다가 정전기가 발생하여 쇼트가 발생하는 경우도 있고, 아무튼 이유는 정말 다양하므로 항상 조심해야 한다.

※ 주변 기기 ※

필자의 경우에는 메인보드만 고장 난 게 아니라, 노트북에 연결되어 있던 마우스와 랜선 어댑터까지 고장 났다. 사실 메인보드 쇼트가 발생했다면 당연히 메인보드와 연결된 모든 주변 기기도 위험할 수 있다. 그래도 마우스가 고장 날 거라고는 예상을 못 했는데, 예상치 못한 지출이 더 발생했다. 그래도 다행인 점은 SSD는 정상이었다는 것이다. 마우스는 고장 났지만, SSD가 살아남아서 정말 다행이다.

 

다만 내 윈도우(Windows) OS는 메인보드에 귀속되어 있었기 때문에 윈도우 정품 인증을 다시 해야 했으며, 카카오톡 인증도 다시 받아야 해서 카카오톡 대화방이 모두 초기화되는 문제가 추가로 발생했다.

 

아래 사진은 삼성 Always 9 노트북 기종의 하판 예시다. (내가 수리를 맡겼던 기종이기도 하다.) 여기에서 빨간색 박스를 친 부분이 SSD이고, 초록색 박스로 친 부분이 USB 및 배터리 포트가 있는 부분이다. 필자의 경우에는 이 USB 포트 부분으로 사과즙이 들어가서 쇼트가 났던 것으로 보인다.

 

출처: https://www.notebookcheck.net/

728x90
반응형

728x90
반응형

  매우 많은 분이 하나의 구글 계정을 이용하여 구글에서 메일 서비스를 이용하고 검색 기능을 이용합니다. 그렇기 때문에 다른 사람이 나의 구글 계정을 알게 된다면 개인정보 및 사생활 침해 등 많은 문제가 발생할 수 있습니다. 이러한 문제는 일반적으로 공용 컴퓨터나 다른 사람의 컴퓨터에서 구글 계정으로 로그인했을 때 가장 많이 발생합니다.

 

  그렇다면 외부의 다른 사람의 컴퓨터에서 구글 계정으로 로그인했다가 실수로 로그아웃하는 것을 잊었다면 어떻게 해결할 수 있을까요? 해결 방법은 생각보다 간단합니다. 네이버, 구글과 같은 서비스는 일반적으로 원격 로그아웃 기능을 제공합니다.

 

※ 원격으로 구글 계정을 로그아웃시키는 방법 ※

 

  방법은 간단합니다. 바로 구글의 [기기 관리] 페이지로 이동하시면 됩니다. 접속 이후에는 다음과 같은 화면을 만날 수 있습니다. 필자의 구글 계정은 3개의 컴퓨터 기기에 로그인되어 있습니다. 이 중에서 노트북에 대하여 [세부정보 더보기] 버튼을 눌러보겠습니다.

 

 

  필자의 경우 다음과 같이 노트북에서 오랜 기간 로그인되어 사용되고 있었네요. 단, 1월 20일 이후로는 해당 노트북으로 구글 계정을 이용하지 않았다고 나오네요. [로그아웃] 버튼을 눌러보겠습니다.

 

 

  이어서 [로그아웃] 버튼을 눌러 실질적으로 로그아웃을 진행합니다.

 

 

  이제 해당 노트북에 대하여 로그아웃이 완료되었기 때문에, 추후에 해당 노트북으로 크롬을 이용할 때는 다시 로그인해야 제 구글 계정을 사용할 수 있는 것입니다. 결과적으로 로그아웃 이후에는 다음과 같이 [로그아웃한 기기] 목록에 노트북이 출력되는 것을 확인할 수 있습니다.

 

728x90
반응형

728x90
반응형

  구인구직 사이트 중에서 사람인(Saramin)이라는 사이트가 있다. 사람인에 가입하게 되면 광고 메일이 하루에도 엄청나게 온다. 하루에도 5개 이상 오는데, 이건 개인적으로 너무하다고 생각한다. 광고 메일을 수신 차단하기 위해서 사람인에 로그인한 뒤에 메일 수신 설정 페이지로 이동하면 된다.

 

  ▶ 사람인 메일 수신 설정 페이지: www.saramin.co.kr/zf_user/member/set-incoming-email

 

  많은 경우 내가 직접 지원한 회사를 제외하고는 소식을 받아보고 싶지 않을 것이다. 그때는 [스크랩 메일 / 내 이력서 조회 메일]제외하고 나머지는 전부 [거부]로 설정하면 된다.

 

 

  참고로 여기에서 [스크랩] 이라는 것은 각 회사의 지원하는 버튼 옆에 있는 [별] 그림을 누르는 것을 의미한다.

 

728x90
반응형

728x90
반응형

대회 링크: codeforces.com/contest/1462

A번 문제: codeforces.com/contest/1462/problem/A

 

  N개의 수가 있다. 예를 들어 N = 8이라고 하면, 다음과 같이 수가 나열된다.

 

  원래 배열: a1, a2, a3, a4, a5, a6, a7, a8

 

  이때 다음과 같은 규칙에 따라 수를 재나열한다.

 

  변경된 배열: a1, a3, a5, a7, a8, a6, a4, a2

 

  이 문제에서의 요구사항은, 변경된 배열을 보고 원래의 배열을 맞추는 것이다. 문제 해결 아이디어는 굉장히 심플하다. 앞에서부터, 그리고 뒤에서부터 번갈아 가면서 출력하면 된다.

 

for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    
    for i in range(n): 
        if i % 2 == 1:
            print(a[n - (i // 2) - 1], end=' ')
        else:
            print(a[i // 2],end=' ')
    print()

 

B번 문제: codeforces.com/contest/1462/problem/B

 

  문장이 주어졌을 때, 하나의 substring을 제거하여 "2020"이라는 문자열을 만들 수 있는지 체크하는 문제다. 이 문제를 풀기 위한 가장 간단한 방법은 제일 앞부분과 제일뒷 부분을 확인하여 "2020"을 만들 수 있는지 확인하는 것이다.

 

(공백) 2020
2 020
20 20
202 0
2020 (공백)

 

for _ in range(int(input())):
    n = int(input())
    data = input()
    
    if data[n - 4:] == "2020":
        print("YES")
    elif data[:1] == "2" and data[n - 3:] == "020":
        print("YES")
    elif data[:2] == "20" and data[n - 2:] == "20":
        print("YES")
    elif data[:3] == "202" and data[n - 1:] == "0":
        print("YES")
    elif data[:4] == "2020":
        print("YES")
    else:
        print("NO")

 

C번 문제: codeforces.com/contest/1462/problem/C

 

  하나의 정수 x가 주어졌을 때, 각 자릿수의 합이 x가 되는 정수 중에서 가장 작은 수를 찾는 문제다. 이때 각 자릿수는 서로 달라야 한다. 예를 들어 x = 15일 때는 69가 정답이다. 이 문제의 해결 아이디어는 간단하다. 자릿수의 값을 최대한 크게 설정하면 값이 작아진다는 점을 이용하면 된다. 따라서 9부터 1까지 확인하면서 빼면 된다.

 

  참고로 45 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9이므로, 45보다 큰 수는 정답이 존재하지 않는다.

 

for _ in range(int(input())):
    x = int(input())
    # 45보다 큰 수는 정답이 없음
    if x >= 46:
        print("-1")
        continue
    result = []
    # 9부터 1까지의 수를 확인하며
    for i in range(9, 0, -1):
        if x >= i:
            result.append(i)
            x -= i
    result.sort()
    print(''.join([str(i) for i in result]))

 

D번 문제: codeforces.com/contest/1462/problem/D

 

  N개의 정수가 있다. 그리고 한 번의 연산을 통해 인접한 두 수끼리 합쳐질 수 있다고 한다. 결과적으로 모든 수가 같아지기까지의 최소 연산 횟수를 구하는 문제다. 예를 들어 [1, 2, 2, 1]이 있다고 하자. 이때 [1, 2, 2, 1] → [3, 2, 1] → [3, 3]으로 단 두 번의 연산이면 된다.

 

  이 문제는 알고 보니 정수론(number theory)이었던 문제다. 모든 수의 합을 summary라고 하자. 1부터 N 사이의 값 중에서 summary를 나누어 떨어뜨리는 것이 가능한 수들이 후보군이다. 예를 들어 summary = 12이고, N = 6이라고 해보자. 그러면 남아있는 수의 개수로는 1, 2, 3, 4, 6이 가능하다. 예를 들어 2의 경우에는 [6, 6]을 남기면 되는 것이다.

 

for _ in range(int(input())):
    n = int(input())
    arr = list(map(int, input().split()))
    
    # 후보군(candidate) 찾기
    summary = sum(arr)
    candidates = []
    for i in range(n, 0, -1):
        if summary % i == 0:
            candidates.append(i)
    
    for candidate in candidates:
        target = summary // candidate
        # 모든 수가 target이 되도록 합칠 수 있는지 체크
        check = True
        value = 0
        for x in arr:
            value += x
            if value == target:
                value = 0
            # 합쳤을 때 target보다 크다면, 불가능한 케이스
            elif value > target:
                check = False
                break
        if check:
            print(n - candidate)
            break
728x90
반응형

728x90
반응형

  고등학교 생활기록부는 나이스(NEIS) 대국민서비스 사이트에 방문하여 발급받으실 수 있습니다. 

 

  ▶ 나이스(NEIS)www.neis.go.kr/

 

  나이스 대국민서비스 사이트에 방문한 이후에는 [홈에듀 민원서비스] 링크로 접속합니다.

 

 

  이후에 자신의 교육청을 선택합니다. 저는 경기도 소재인 고등학교에 다녔기 때문에 [경기도 교육청] 버튼을 클릭하였습니다.

 

 

  이후에 [학교생활기록부] 링크를 클릭하여 생활기록부를 발급할 수 있습니다.

 

 

  여기에서 성명 및 주민등록번호를 입력한 뒤에 [인증서 로그인] 버튼을 눌러 공인인증서로 로그인할 수 있습니다.

 

 

  이후에 다음과 같이 [찾기] 버튼을 클릭하여 자신의 학교를 검색하고 [확인] 버튼을 누릅니다.

 

 

  이어서 [발급] 버튼을 눌러 발급받을 수 있습니다.

 

 

  다음과 같이 [저장] 버튼을 눌러 생활기록부를 다운로드받을 수 있습니다.

 

 

  참고로 문서에는 비밀번호가 걸려 있는데, 비밀번호는 자신의 생년월일 6자리입니다. 필자는 Foxit과 같은 PDF 파일 수정 프로그램을 사용하여 담임 선생님의 성명이나 주소 등은 지웠습니다.

 

728x90
반응형

728x90
반응형

  하나의 프로그램의 취약점을 찾는 방법에는 다양한 기법이 있다. 기본적으로 프로그램은 입력(input)을 받아서 출력(output)을 내보내는 방식으로 동직하는데, 퍼징(fuzzing)이란 자동적으로 입력을 생성하여 반복적으로 프로그램에 넣어보는 것이다. 기본적으로 퍼저(fuzzer)는 입력을 만들어 내는데, 입력을 반복적으로 변형(mutating)하며 프로그램에 넣어보는 소프트웨어를 의미한다. 실질적인 측면에서 퍼징은 크래시(crash)를 만들기 위한 도구로 쓰이는 경우가 많다.

 

  퍼징을 더욱 더 엄밀하게 정의하면 다음과 같다.

 

  "Fuzzing refers to a process of repeatedly running a program with generated inputs to test if a program violates a correctness policy."

 

  카이스트(KAIST) 차상길 교수님의 자료에서는 다음과 같은 그림이 있다.

 

 

  퍼저의 종류는 크게 세 가지로 구분할 수 있다.

 

1. Black-box Fuzzing: 프로그램의 내부적를 알지 못하고, 입력에 따른 출력만 확인이 가능한 상태에서 퍼징을 하는 것이다.

 

2. White-box Fuzzing: 프로그램의 내부를 알기 때문에, 프로그램 내부의 모든 possible path를 검사할 수 있도록 조건에 맞는 입력을 넣는 방식으로 퍼징을 하는 것이다. 그래서 symbolic execution을 같이 하면서 입력값을 mutating하여 퍼징을 진행할 수 있다.

 

3. Grey-box Fuzzing: 프로그램 내부의 일부(some information)를 아는 상황에서 퍼징을 하는 것을 의미한다.

 

  굉장히 유명한 퍼저(fuzzer)로는 AFL이 있다. AFL은 가장 대표적인 Grey-box 방식의 fuzzer으로, 아직까지도 state-of-the-art인 baseline으로 제안되고 있다. 이러한 AFL로부터 매우 많은 fuzzer들이 영향을 받아 제안되었다.

728x90
반응형

728x90
반응형

  블록체인(blockchain) 분야에는 다양한 보안 이슈가 존재한다.

 

1. INFRASTRUCTURE ATTACK

 

  이 분야에서 가장 유명한 공격은 51% 공격(attack)이다. 이는 네트워크에서의 컴퓨팅 파워의 50% 이상을 차지하는 집단이 있다면, 전체 네트워크를 컨트롤할 수 있다는 것을 의미한다. 또한 가상화폐의 trade를 막기 위한 DDoS 공격 유형도 사용될 수 있다. 그리고 시빌(Sybil) 공격은 여러 개의 virtual identity를 만드는 유형을 의미한다. 예를 들어 비트코인의 경우 다수의 지갑을 만들어 실제로는 혼자이지만, 다수의 사람인 척 흉내를 낼 수 있다. 이러한 공격이 이클립스(eclipse) 공격으로 연결될 수 있는데, 특정한 노드와 연결된 노드들을 전부 attack node로 채워버려 하나의 노드를 고립된(isolated) 상태로 만들 수 있다.

 

  또한 mining pool을 공격(attack)하는 유형도 존재한다. 대표적으로 FC 2014에서 발표된 Selfish Mining이 있다. 채굴(mining) 자체는 경쟁적으로 이루어지며, 자신이 속한 체인(chain)의 길이가 가장 길어야 실질적인 이득을 볼 수 있을 것이다. Selfish Mining의 기본적인 아이디어는 nonce 값을 찾은 뒤에 바로 공표하지 않고, 그다음 블록을 미리 만들고 있는 것이다. 나중에 honest miner가 블록을 발표했을 때, 공격자가 한꺼번에 2~3개의 블록을 공표하여 자신의 체인이 가장 길어지도록 한다. 즉, honest miner의 computation power를 wasted 하도록 만드는 것이다.

 

2. APPLICATION ATTACK

 

  먼저 이중 지불(double spending) 공격이 있다. 말 그대로 동일한 돈을 여러 노드에 송금하는 공격이다. 내가 1 BTC를 가지고 있는 상황에서, A와 B에게 모두 1 BTC를 보내는 공격 유형이다. 이중 지불을 막기 위한 기본적인 방어 기법은 해당 transaction 이후에 최소한 6개의 연달아 생성된 블록(block)이 되었을 때 인정하도록 하면 된다.

 

  또한 스마트 컨트랙트(smart contract) 취약점을 공격하는 유형도 존재한다. 실제로 DAO 토큰의 사례가 자주 언급되는데, 스마트 컨트랙트를 작성할 때의 실수로 문제가 발생한 사례이다. 나아가 자동화 도구를 개발하여 이더리움의 스마트 컨트랙트 취약점을 찾도록 하는 연구도 많이 진행되고 있다. 대표적인 문제점인 reentrancy, unchecked send와 같은 다양한 취약점이 존재하는지 개별 스마트 컨트랙트에 대하여 검사하도록 할 수 있다. 대표적인 메서드가 ZEUS이다.

728x90
반응형

728x90
반응형

  기본적으로 다양한 데이터가 있는 DB에 대하여 쿼리(query)를 날려서, 결과를 얻을 수 있다. 공격자는 적당한 쿼리를 날려서 특정한 인물의 데이터를 특정할 수 있다. 이는 개인 정보(Privacy)를 알아내는 공격으로 볼 수 있다.

 

  예를 들어 특정한 마을의 의료 정보 DB가 있을 때, DB 상으로 당뇨에 걸린 사람 중에서 나이가 75살인 여성이 있다고 해보자. 하지만 이때 해당 마을에 70살 이상의 여성이 1명뿐이라면? 우리는 의료 정보 DB로부터 개인을 특정할 수 있고, 이로 인해 개인 정보가 침해될 수 있다.

 

  다른 예시로 학교 DB에 포함된 데이터에서의 평균 나이가 25살, 대부분의 전공이 컴퓨터 공학이라고 해보자. 이때 특정한 사람은 평균 나이의 2배에 해당하는 나이를 가지며, 대부분의 전공과 같은 전공을 가지며, 고급 아파트에 살고 있다는 정보를 알게 되었다고 해보자. 그러면 우리는 학교에서 컴퓨터 전공인 50살을 특정하여, 그 사람이 고급 아파트에 살고 있다는 사실을 알게 된다. 실제로 학교에서 50살인 사람의 수가 매우 희박하다고 하면, 우리는 어떤 사람을 특정할 수 있게 된다. 즉, 개인 정보 보호가 깨지게 된다.

 

  이러한 문제를 어떻게 해결할 수 있을까? 바로 Differential Privacy를 사용하면 된다. DP의 메인 아이디어는 간단하다. DB의 보안성이 떨어지는데, 그렇다고 암호화를 통해 해결할 수 있는 문제도 아니므로, 그냥 노이즈를 섞어버리는 것이다. 실제로 ACM CCS 2014에서 발표된 논문에 의하면 구글도 이러한 DP를 적용하여 개인정보 보호 문제를 해결하고 있다.

 

  아래 공식을 확인하자. 여기에서 A가 1에 가깝다는 말은 i라는 데이터를 넣었을 때나 넣지 않았을 때나 구분이 잘 안 된다는 말이다. 다만 A가 완전히 1의 값을 가지게 되면 한 명의 정보는 전체 DB에 아무런 영향을 미치지 못하므로, 사실상 효용성(utility) 자체가 없다는 말이 된다. 반면에 A가 1보다 너무 커지면 한 명의 정보가 DB에서 빠지면 곧바로 티가 나기 때문에 개인 정보 침해 문제가 발생한다.

 

 

  그렇다면 A라는 값을 어떻게 설정해야 적당할까? 값이 너무 작으면 DB의 효용이 떨어지고, 값이 너무 크면 개인 정보가 유출될 수 있다. 그래서 통계적으로 적당한 값을 설정하면 되는 것이다. 그래서 결과를 내보낼 때 노이즈(noise)를 섞어서 내보내면 된다. 일반적으로 라플라스 노이즈(Laplacian noise)를 사용한다. 쿼리(query)에 대한 응답을 보낼 때마다 매번 새로운 노이즈를 섞어 보내면 된다. 마찬가지로 노이즈가 많이 섞이면 DB의 효용성을 떨어뜨리고, 노이즈가 적게 섞이면 개인 정보가 유출될 수 있는 것이다.

 

  또한 global sensitivity라는 용어를 이해할 필요가 있다. D1과 D2는 오직 한 사람(one person) 만큼의 차이가 있는 DB들을 의미한다. 이때 global sensitivity란 F(D1)와 F(D2)의 거리를 나타내기 위한 식을 의미한다.

 

 

  관련한 내용으로 Local Differential Privacy라는 분야도 존재한다. 이때는 각각의 사람(person)이 DB Service Provider를 믿을 수 없을 때 사용할 수 있는 개념이다. 예를 들어 "Have you ever used illegal drugs?"라는 질문에 대하여, 내가 응답한 내용이 DB에 담긴다고 하보자. 이때 단순히 진실만을 말하지는 말고, 내가 DB에 데이터를 넣기 전에 노이즈(noise)를 섞을 수 있다.

 

  예를 들어 응답하기 전에 동전을 던져서 앞면이 나왔을 때는 그냥 랜덤하게 Yes/No라고 답하고, 뒷면이 나왔을 때는 진실한 답변을 할 수 있다. 나중에 추적을 당했을 때를 고려하여, 이렇게 DB에 넣기 전에 로컬(local)에서 노이즈를 섞자는 아이디어를 합법적 부인이라고 표현한다. 쉽게 말하면 여기에서는 DB에 데이터 삽입할 때 노이즈가 섞인 데이터를 넣는 작업으로 볼 수 있다.

 

 

  마찬가지로 입실론(epsilon) 값을 설정하여 privacy-utility의 trade-off를 결정할 수 있다. 입실론 값이 작으면 두 분포를 구분할 수 없으므로 더욱 privacy하고, 입실론 값이 크면 두 분포를 쉽게 구분할 수 있으므로 덜 privacy 하다고 이해하면 된다.

 

 

  대표적으로 Google RAPPOR (CCS 2014)와 같은 논문이 이러한 아이디어를 이용한 방법을 제안하고 있다.

728x90
반응형

728x90
반응형

  SD 카드에 Ubuntu 16.04 Server 설치용 이미지를 구워보자. 설치용 이미지는 다음의 경로에서 받을 수 있다.

 

  ▶ Ubuntu 16.04 Releases: releases.ubuntu.com/16.04/

 

  참고로 설치용 이미지 파일의 용량은 1GB도 안 되는 작은 크기를 가지고 있다. 따라서 짧은 시간에 다운로드가 가능하며, 곧바로 사용할 수 있다.

 

 

  리눅스(Linux) 터미널 환경에서는 다음과 같이 wget 명령을 이용하여 다운로드받을 수 있다.

 

mkdir ubuntu_images
cd ubuntu_images/
wget https://releases.ubuntu.com/16.04/ubuntu-16.04.7-server-amd64.iso

 

 

  이후에 SD 카드를 컴퓨터에 연결한다. fdisk -l 커맨드를 이용하여 다음과 같이 SD 카드의 블록 장치를 확인할 수 있다. 필자의 경우 /dev/sde이다.

 

 

  따라서 dd 명령어를 사용하여 플래시를 진행하면 된다. 참고로 sync 명령어는 데이터 동기화를 수행하여 유실되는 데이터가 없도록 한다.

 

sudo dd if=ubuntu-16.04.7-server-amd64.iso of=/dev/sde
sync

 

  결과적으로 다음과 같이 ISO 파일을 플래시 하는 작업이 완료된다.

 

 

  이제 SD 카드에 Ubuntu 16.04 설치용 이미지가 플래시 된 것이다.

 

  최종적으로 이 SD 카드를 컴퓨터에 꽂고 부팅하여, Ubuntu 16.04 서버를 원하는 저장장치에 설치하면 된다. (당연히 실제로 OS가 설치될 저장 장치는 따로 있어야 한다.)

728x90
반응형