Làm cách nào để nhanh chóng tạo các khóa GPG (không an toàn)?


8

Tôi muốn tự động hóa việc tạo ít nhất hai khóa GPG cho mục đích thử nghiệm và trình diễn trong một máy ảo. Vì bối cảnh này, tôi muốn đảm bảo việc tạo khóa nhanh, lý tưởng là không sử dụng hoặc sửa đổi /dev/*randomgì cả. Ví dụ: sử dụng đồng hồ hệ thống làm nguồn ngẫu nhiên duy nhất sẽ ổn:

$ gpg --quick-gen-key 'alice' [options] --random-data $(date +%s)
$ sleep 2
$ gpg --quick-gen-key 'bob' [options] --random-data $(date +%s)

Tôi đã không thể tìm thấy bất kỳ tùy chọn như thế này. Có -quick-random--debug-quick-randomkhông có trong mantrang, dường như được hỗ trợ gpgchỉ không hoạt động. Các lệnh này, ví dụ, đã chạy trong vài phút trước khi tôi giết chúng:

$ gpg --batch --debug-quick-random --passphrase 'alice' --quick-gen-key 'alice@example.org'
$ gpg --batch -quick-random --passphrase 'alice' --quick-gen-key 'alice@example.org'

Sử dụng gpg(GnuPG) 2.1.2.


Con đường nào bạn đã đi cuối cùng?
gf_

@gf_ Tôi chuyển sang thứ khác.
l0b0

Câu trả lời:


6

Bạn có thể tạm thời /dev/randomrút khỏi /dev/urandomviệc sử dụng rng-tools:

# rngd -v -f -r /dev/urandom

Thêm thông tin tại đây: https://madebits.github.io/#blog/2014/2014-05-30-Making-dev-random-T tạm-Faster.md


Cũng liên quan là một daemon được gọi haveged, tôi dường như nhớ lại rằng RHEL / CentOS có một nhưng không phải cái khác.
Ulrich Schwarz

1
Làm thế nào để bạn hoàn nguyên nó trở lại an toàn hơn /dev/urandom?
l0b0

3

Tôi đã có cùng một yêu cầu chính xác trong khi viết chương trình thiết lập thẻ thông minh của mình . Trong quá trình thử nghiệm, tôi sẽ không quan tâm đến entropy và tôi cần tạo nhiều khóa GPG liên tiếp trong mỗi lần kiểm tra.

Như tôi đã mô tả trong câu trả lời của mình ở đây , kịch bản sau đây đã giúp tôi tăng tốc mọi thứ:

#!/usr/bin/env python
# For testing purposes only 
# DO NOT USE THIS, THIS DOES NOT PROVIDE ENTROPY TO /dev/random, JUST BYTES

import fcntl
import time
import struct

RNDADDENTROPY=0x40085203

while True:
    random = "3420348024823049823-984230942049832423l4j2l42j"
    t = struct.pack("ii32s", 8, 32, random)
    with open("/dev/random", mode='wb') as fp:
        # as fp has a method fileno(), you can pass it to ioctl
        res = fcntl.ioctl(fp, RNDADDENTROPY, t)
    time.sleep(0.001)

Điều này không có cơ hội khá lớn dẫn đến các khóa giống hệt nhau sao? (Tôi đoán điều đó có thể bị phản tác dụng bằng cách thêm thời gian nano vào hỗn hợp.)
l0b0

@ l0b0 Tôi không nhận thấy điều đó, nó có thể. Nhưng nó không phải là vì hệ thống vẫn chèn entropy trong suốt thời gian nó chạy. Bạn có thể sử dụng thời gian nano hoặc một số trình tạo số ngẫu nhiên chu kỳ dài không phụ thuộc vào việc đọc từ /dev/random.
Anthon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.