반응형

translation 24

Beej's Guide to Network Programming 요약, Part 2. Slightly Advanced Techniques

마지막 한 섹션이지만, 그 내용도 어려워지고 번역하기도 어려워져서 Part 2로 따로 쓰게 되었다. 역시나 미사여구는 쳐 내고 핵심 내용 중심으로 옮겼으니, 원문도 꼭 읽어보시기 바란다. 7. Slightly Advanced Tenchniques 7.1. Blocking "Block"은 "sleep"을 기술적으로 멋지게 하는 말이다. listener를 실행할 때 보면 알 수도 있을텐데, recvfrom()을 실행했을 때 들어오는 데이터가 없다면 recvfrom()은 거기서 데이터가 올 때 까지 "block"하고 있다 (잠깐 자고 있다)는 것이다. 많은 함수들이 block 한다. accept()이나 모든 recv() 함수들이 그렇다. Block이 가능한 이유는? 그렇게 할 수 있도록 kernel의 허락을 ..

Programming 2019.09.14

Beej's Guide to Network Programming 요약, Part 1

최근에 (1년 전에?) 제일 정리하고 싶었던 글인데, 실제로 network programming이 절실할 때가 와서야 하게 되었다 (흑흑). 원문은 Network programming에 대해 모르는 개발자에게 딱 좋은 튜토리얼이라고 생각한다. 여러 미사여구와 필자의 썰은 가지쳐내고 핵심적인 내용만 정리해본다 (Part 2 대기 중). 2. What is a Socket? Socket은 standard Unix file descriptor를 통해서 다른 프로그램과 소통하는 통로이다. 이 file descriptor는 socket() system routine을 호출해서 얻는다. 그리고 send()와 recv() socket call을 이용해 통신할 수 있다. 다른 file descriptor처럼 read(..

Programming 2019.07.28

GNU/Linux Crypto :: 05 :: Passwords

5. Passwords 추측하기 쉬운 비밀번호를 사용한다든지, 똑같은 비밀번호를 여러 계정에 사용하면 하나의 계정만 뚫려도 여러 계정에 여파가 미치기 때문에 꽤나 심각한 보안 문제라는 것이 알려지고 있다. 만약 해커가 당신의 비밀번호의 hash를 알아냈다면, 당신은 그 hash 값을 통해 본래 비밀번호로 되돌리기가 매우 어렵기를 원한다. 혹여라도 본래 비밀번호로 되돌려졌다면, 그 비밀번호는 다른 계정에도 쓰이지 않아서 다른 곳에 여파가 미치지 말아야 한다. 이러한 인식 덕분에 비밀번호 관리자가 등장하게 되었다. 비밀번호 관리자는 비밀번호를 안전하게 생성 및 저장하고 불러올 수 있으며, 마스터 비밀번호나 passphrase를 통해서 암호화시키는 도구이다. KeePass와 같이 local에 저장하는 프로그램..

GNU-Linux 2019.06.22

GNU/Linux Crypto :: 04 :: Agents

4. Agents 지난 글을 통해 GnuPG와 SSH를 모두 안전하게 설정했다면 이제 우리는 메세지를 암호화, 복호화, 서명하고 이를 증명할 수 있다. 그리고 비밀번호를 노출시킬 일도 없으며 brute-force 공격을 당할 가능성이 현실적으로 0에 가깝게 원격 서버에 인증할 수 있다. 다 좋은데, 여전히 이 연결 고리에서 한 가지 약점이 아직 남아있다 - 바로 우리의 passphrase이다.자주 원격 서버에서 작업을 한다면, 대부분의 작업마다 passphrase를 입력하는 것은 꽤나 귀찮은 일이다. 그래서 passphrase 입력을 자동화한다거나, 아예 당신의 private key를 암호화되지 않은 상태로 두어서 passphrase를 쓰지 않고 싶은 생각이 들 수도 있다. 후자의 경우에, 보안에 많은 ..

GNU-Linux 2019.06.09

GNU/Linux Crypto :: 03 :: SSH Keys

3. SSH Keys 원문 링크 OpenSSH 서버에 접속하기 위해 인증하는 흔한 방법으로 당신의 remote machine의 shell 비밀번호를 입력해서 접속하는 것이 있다. tom@local:~$ ssh remote The authenticity of host 'remote (192.168.0.64)' can't be established. RSA key fingerprint is d1:35:45:a6:d1:b2:e4:08:f8:67:b1:19:fe:04:ca:1c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'remote,192.168.0.64' (RSA) to the list of kn..

GNU-Linux 2019.03.02

GNU/Linux Crypto :: 02 :: GnuPG 사용법

GnuPG의 기본적인 사용법을 살펴보고 이를 기반으로 SSH, Mutt 등 개발자의 일상 생활에서 생각하는 보안에 대해서 짚어볼 수 있는 좋은 시리즈입니다. 원문 번역에 충실했으며, 제가 사용하는 GPG 버전과 원문에 있는 콘솔 출력 내용이 다르기 때문에, 제가 사용하는 버전에 맞추어 다시 쓴 것임을 알립니다. 본래 콘솔 내용은 당연히 원문에서 볼 수 있습니다. 2. GnuPG 사용법 원문 링크이전 글에서 private key와 public key를 생성하고 저장했으니, 이제 인터넷과 같이 신뢰할 수 없는 곳에 파일을 배포하기 위한 서명(sign), 증명(verify), 암호화(encrypt), 암호 해독(decrypt)를 하기 위한 GnuPG의 몇 기능들을 사용해보자. 텍스트 파일이나 메세지에 서명하기..

GNU-Linux 2019.01.20

GNU/Linux Crypto :: 01 :: GnuPG Keys

GnuPG의 기본적인 사용법을 살펴보고 이를 기반으로 SSH, Mutt 등 개발자의 일상 생활에 걸쳐 있는 보안에 대해서 짚어볼 수 있는 좋은 시리즈입니다. 원문 번역에 충실했으며, 제가 사용하는 GPG 버전과 원문에 있는 콘솔 출력 내용이 다르기 때문에, 제가 사용하는 버전에 맞추어 다시 쓴 것임을 알립니다. 본래 콘솔 내용은 당연히 원문에서 볼 수 있습니다. 1. GnuPG Keys 원문 링크 Keypair 생성하기 첫 걸음으로 4096-bit의 RSA keypair를 생성해볼 건데, 이는 보통 기준보다 훨씬 높은 암호화 수준이다. 여기서는 Debian 개발자들이 추천하는 몇몇 방식을 따라갈 것이다.본인이 개인적인 용도로 쓰는 최신 데스크탑 컴퓨터를 사용해야 엔트로피를 수월하게 생성할 수 있다. 물론..

GNU-Linux 2019.01.13

쪼잔한 Rust 9. 오류 다루기

Chapter 9. 오류 다루기 Rust가 안전한 언어가 되기 위한 노력은 오류 다루는 데까지 닿아있다. 오류도 소프트웨어의 일부라고 할 수 있는 만큼, Rust는 뭔가 잘못된 상황을 다루는 많은 기능을 탑재하고 있다. 많은 경우에 Rust는 오류가 날 수 있는 가능성을 사용자가 알고 있기를 요구하고, 오류 상황에서의 대처법이 마련되어있어야 컴파일이 가능하다. 이러한 깐깐함은 당신의 코드가 프로덕션에 배포된 후에 오류가 발생하는 것을 보기 전에 오류들을 발견하고 처리하도록 강제하기 때문에 당신의 프로그램을 더욱 강건하게 해주는 것이다! Rust는 오류를 크게 두 가지로 분류하는데, 회복 가능한(recoverable) 오류와 회복 불가능한(unrecoverable) 오류가 그 두 가지이다. 파일을 못 찾는..

Programming/Rust 2018.11.17

쪼잔한 Rust 16. 두렵지 않은 Concurrency

Chapter 16. 두렵지 않은 Concurrency Concurrent 프로그래밍을 안전하고 효율적으로 다루는 것이 Rust가 삼는 주된 목표 중 하나이다. 프로그램의 여러 부분을 독립적으로 실행시키는 concurrent 프로그래밍과 동시에 실행시키는 parallel 프로그래밍은 많은 컴퓨터들이 여러 프로세서를 이용함에 따라 더욱이 중요하게 여겨지고 있다. 역사적으로 볼 때, 이러한 영역의 프로그래밍은 어렵고 오류가 나기 쉬운 것으로 생각되어왔다. Rust는 이러한 인식을 바꾸고 싶다. Rust 팀은 애초에 메모리의 안전을 보장하는 것과 concurrency 문제를 예방하는 것은 완전히 별개의 문제라고 생각했었다. 시간이 지나면서, Rust 팀은 소유권과 타입 시스템이 이 두 가지 문제를 해결하는데 ..

Programming/Rust 2018.09.11

쪼잔한 Rust 6. Enum과 패턴 맞추기

Chapter 6. Enum과 패턴 맞추기 이번 챕터에서는 enumeration, 또는 enum이라고 부르는 것에 대해 알아보고자 한다. Enum은 가능한 경우의 값들을 헤아려서(enumerate) 그 종류를 정의할 수 있게 해준다. 우선, enum을 정의하고 사용해 봄으로써 enum이 어떻게 데이터와 연계되는 의미들을 코드에 새기는지 볼 것이다. 그 다음에는, 그 중에서도 특별히 유용한 enum인 Option을 알아볼 것인데, Option은 그 값이 무언가 있거나 없거나 할 수 있는 표현을 가능하게 한다. 그러고 나서는 match expression을 통한 pattern matching이 enum의 여러 값들을 다루기 위한 다른 종류의 코드를 얼마나 쉽게 다루는지 보게 될 것이다. 마지막으로, if l..

Programming/Rust 2018.09.03