用 TOTP 擺脫簡訊驗證碼:安全好用的兩步驟驗證

兩步驟驗證 隨著數位身份在生活中的影響力愈來愈大,只靠著一組密碼來保護我們的帳戶已經不夠安全,而且記密碼實在是違反人腦天性的行為,因此大部分人總是使用重複的、好記的脆弱密碼。要解決這個問題,除了使用密碼管理工具來幫你記密碼,還可以透過設定兩步驟驗證(2FA:Two-Factor Authentication),大大提昇帳戶的安全性。 兩步驟驗證就是在密碼之外,多用一個資訊來驗證你是本人,主流的作法有像 Email、簡訊驗證信,但用過的人可能都會覺得登入時要開信箱收信很麻煩,信箱也會被這些信件給弄亂,更別提當人在國外時,簡訊收不到害你無法登入。 今天要介紹的 TOTP: Time-based One-Time Password algorithm,就是一種公開的標準,讓你透過手機上的 APP 產生一組 6 位數的一次性驗證碼進行登入,而且在沒有網路的情況下還能使用! TOTP 如何運作? TOTP 的概念,就是網站與你事先約定好一組金鑰,並以當下的時間作為參數,運算出一個雜湊值,並取最後 6 位數作為一次性密碼。 然而如果網站和使用者的時間不同的話,就無法計算出相同的結果,因此通常會以 30 秒作為一個單位,來避免使用者與網站的時間差。網站為了良好的使用者體驗,通常也會允許前一次的一次性密碼。 TOTP 的優點 TOTP 它是一個公開標準,你不需要依賴單一企業或組織,各種客戶端都能相容;它的安全性基於密碼學,而非第三方機構的信用;它是去中心化驗證,整個驗證流程只有要驗證身份的雙方而已。 Google 可以讀你的 Gmail,簡訊也可以被政府或通訊業者攔截,然而 TOTP 不需要依賴中介機構,甚至在離線的情況下也仍然可用。 同時對於服務提供者而言,TOTP 也很容易實做,不需要花錢去發簡訊或是寄 Email 被當成垃圾郵件,也不需要跟第三方機構申請,是個省錢又安全的好方法。 開始使用 TOTP 儘管目前懂得使用 TOTP 的使用者並不多,但其實已經有相當多網站支持以 TOTP 作為驗證方式,例如 Google、Facebook、Apple、Amazon、GitHub、PayPal 等,我管理伺服器需要用到的 CloudFlare、Linode、Porkbun 也都有設定 TOTP 來提高安全性。 開始使用的第一步是下載一個 TOTP 的應用程式,有非常多的選項,我自己使用的是 Authy,界面簡單易用,提供加密的雲端備份,此外還有 Google Authenticator、Microsoft Authenticator,自由軟體則有 Red Hat 開發的 FreeOTP,先前在密碼管理工具提到的 Bitwarden 的付費版也有提供 TOTP 的功能。 安裝好驗證器後,到你要登入的網站或 APP 的帳號設定中,啟動兩步驟驗證,在不同網站中,可能會以「驗證應用程式」、「谷歌驗證器」、「代碼產生器」等名稱出現,但背後都是 TOTP 這套標準,流程也很簡單,網站會將金鑰以 QR Code 的方式顯示,打開手機上的驗證器程式掃描就可以加入帳號,並輸入產生的一次性密碼供網站確認,就可以完成綁定。網站若是在手機上,則可以用「複製金鑰」的方式來手動輸入金鑰。...

February 7, 2020 · 1 分鐘 · wancat

Caddy 安裝教學

Caddy 是一個由 Go 撰寫的 Web Server,其主要賣點是簡單的設定檔,適合在開發環境中快速架設,還有自動 HTTPS 的功能,相當方便。 我之前在 Linode 上就使用 Caddy,覺得體驗相當好,因此這次也選擇使用它。 安裝 到 Caddy 網站的下載頁面,複製 One-step installer script 就可以一鍵安裝。 curl https://getcaddy.com | bash -s personal 如果是要拿來當開發環境中的 Web Server,這樣就足夠了,但我要讓它在背景執行,因此還需要設定好它的 systemd。 Systemd 請參考官方的安裝教學,照著做就行了,比較容易踩雷的是取得憑證的部份,首先 Let’s Encrypt 會對你做 DNS challenge,所以如果是使用 CloudFlare 的,要把 Proxy 關掉(雲朵)。再來是寫設定檔,Caddy 的設定檔相當簡單,不過用 systemd 就是很難除錯(看 log 麻煩),所以建議先自己用 sudo caddy -conf /etc/caddy/Caddy 測試設定檔,等到沒問題再用 systemd 開。 設定檔範例 以下是我網站使用的設定檔 matomo.wancat.cc { root /var/www/matomo gzip fastcgi / /var/run/php/php7.3-fpm.sock php { index index.php } } lincalvino.me/narcissism { root /var/www/narcissism } lincalvino....

February 4, 2020 · 1 分鐘 · wancat

CloudFlare 設定 DDNS 教學

最近剛入手一個 Raspberry Pi,用來作為一個省電的伺服器,本來困擾自己家裡的固定 IP 已經給了其他台伺服器,但找到方法用 CloudFlare 實現 DDNS。 CloudFlare DDNS CloudFlare 本身沒有官方的 DDNS 支援,但可以用 CloudFlare API 實做,我找了一個別人做好的 CloudFlare-ddns,折騰一會兒就設定好了。 首先安裝 cloudflare-ddns 和其依賴,然後以我要設定 pi.wancat.cc 為例,建立 site_pi.yaml 設定檔,填入以下內容: %YAML 1.2 # CloudFlare DDNS updater script config. --- # CloudFlare API key # You can find this under Account > My account after logging into CloudFlare. cf_key: 'your key' # Email address for your CloudFlare account. cf_email: 'your email' # Domain you're using CloudFlare to manage....

February 4, 2020 · 2 分鐘 · wancat

Google Analytics 替代方案 Matomo 安裝教學

因為實在不想再讓 Google 拿到資料了,所以我到 No More Google 網站上找 Google Analytics 的替代方案,第一名就是 Matomo。 Matomo 是一個自架的流量分析程式,是自由軟體,也有提供付費的 Cloud hosting 服務。我在試用後覺得還不錯,就決定自行在 Raspberry Pi 上安裝。因為是自架的,所以資料都在自己手上,不會被 Google 拿去利用。 安裝方式參考官方文件。 環境需要 PHP、MySQL or MariaDB PHP 安裝: sudo apt-get install php7.0 php7.0-curl php7.0-gd php7.0-cli mysql-server php7.0-mysql php-xml php7.0-mbstring 資料庫我比較偏好社群維護的 MariaDB: sudo apt install mariadb-server sudo mysql_secure_installation 建議在執行 mysql_secure_installation 來強化安全性。 由於我使用 Caddy,所以 Caddyfile 中要加入以下程式: matomo.wancat.cc { root /var/www/matomo # 換成你的 matomo 位置 gzip fastcgi / /var/run/php/php7.3-fpm.sock php { index index.php } } 然後打開網頁,就可以看到安裝程式了。接著要幫 Matomo 設定好 SQL User 和 Database,...

February 4, 2020 · 1 分鐘 · wancat

Hugo 安裝 LikeCoin 教學

取代 Hexo 我使用 Hexo 作為靜態網站生成器已經一年半,然而它有些我越來越難忍受的缺點,加上認識了由 Go 寫成的 Hugo,我在使用 Hugo 建立了幾個網站作為練習後,決定將自己的部落格改到 Hugo。 Hexo 仍然是一套很棒的工具,我主要是覺得它每次執行都要等大約十秒的時間,讓我很不耐煩;另外它的 server 功能有些缺陷,有時候改變內容會讓它變成 Untitled Post,不過我也沒有很認真的想要解決就是了。 Hugo 是 Go 寫的工具,所以是編譯好的,效能很高,server 功能也很棒,content 的管理更有彈性,整個網站也有更高的配置空間,但使用難度較高,每個 theme 的差異度很大,必須依據使用的 theme 去調整。 我覺得對新手來說 Hexo 是比較好的選擇,一開始就有預設 theme,整個架構也比較固定,內建的 deploy 指令能支援大部分平台,但如果想要有更高的自訂化,我覺得 Hugo 比較合適。 Theme 這次我選了 CleanWhite 這套主題,功能強大,設計的很好,非常感謝作者 Huabing Zhao。因為 Hexo 跟 Hugo 都是使用 Markdown 作為文章格式,連標頭格式都差不多,所以基本上是無痛轉移,只有圖片的部份需要重新插入,因為 Hexo 的「資產資料夾」是使用其特殊語法,所以轉移後需要自己手動改成標準的格式。 插入 LikeCoin Hugo 可以使用自訂 Layout 的方式,在不改變主題的情況下改變網站設計,我透過這個方式在每個文章下放了 LikeButton。 我們先 overwrite 文章的模板,將 theme 的 layouts 資料夾複製到專案目錄下。 cp -r theme/YOUR_THEME/layouts/ . Hugo 中的 Partial 功能,可以讓你建立小模板,嵌入在頁面中。參考文件。在 layouts 的 partials 資料夾建立 likecoin....

February 3, 2020 · 2 分鐘 · wancat

翻轉教育的錯誤姿勢

什麼是翻轉教育 翻轉教育,是一種新型態的課堂教育方法,於 2007 年起源於美國,在 2013 以台大葉丙成教授為首,開始在台灣推動,其核心思想就是將「授課」與「練習」的時段翻轉。 傳統教育方式是課堂中上課、回家做練習,然而這樣的方式有兩個缺點:第一,每個學生程度不一,老師難以掌握合適速度;第二,學生回家做練習如果遇到問題,沒辦法即時與老師討論,只能自己找同儕或是仰賴補習班。 翻轉教育的作法,則是讓學生在家學習、在學校做練習。老師需要先將教學內容錄製成影片或其他形式,讓學生在家自行學習,在課堂上則是做練習,這樣老師就能即時掌握同學的學習狀況,並給予引導及幫助,同時作業因為是在課堂做,完成率也會提昇。 在台灣有名的例子,就像是葉丙成教授的機率課、均一教育平台等。 翻轉教育的錯誤姿勢 翻轉教育的常見誤解,是將其視為「讓學生當老師」,這樣的誤解可能是來自「翻轉老師與學生的角色」,翻轉教育是讓學習主動權從老師轉移到學生,但不代表要讓學生變成老師,更不代表換學生上來教課。 身為學生,我常常看到有老師打著「翻轉教育」的名號,但卻是叫學生分組,第一組上第一課、第二組上第二課,而老師就在教室後面偶爾糾正同學,結束後評論一下就好。這個完全不是翻轉教育,我在台灣吧教育論壇上有幸能親身訪問到葉丙成教授,他對此表示: 「這樣的老師只是在打混而已」 老師之所以為老師,是因為有著高出學生許多的能力,可以帶給學生成長。將教學的責任丟給學生並不是教育,除非是在上教育學程。 再者,這樣的形式通常會更無聊,我們以國文課舉例,國文這個科目所需要的素養,必須長時間的閱讀、思考來累積,難以在一個學期之內達成,要讓學生準備一個需要大量素養的國文課,完全是強人所難。 根據我自己的經驗,學生所準備的課程往往流於表淺,只能上字音字形、成語、翻譯等講義上的內容。我們想要改變過去的填鴨課程,學生卻自己準備出更填鴨的課程。一個好的國文老師,應當能教出遠超出課本範疇的深度內容,分析文本背後的背景脈絡,引起同學對作品的多元思考,這才是國文課應有的價值。 翻轉教育並非萬靈丹 我支持翻轉教育,但我認為翻轉教育並不是解決所有教育問題的萬靈丹,它在某些情況下可以帶來良好的效果,但有時候則否,甚至常常被誤用,導致現在的學生往往聽到翻轉教育就恐懼。 我認為翻轉教育適合的應用場景,應該是需要學生大量練習的科目,以及能客觀檢驗對錯的科目。例如數學、科學、程式,這些科目學生之間往往有明顯的程度差異,透過翻轉教育,可以讓優秀的學生盡情發揮,落後的學生得到老師的協助。 由於翻轉教育的「學習」階段,是學生獨力完成的,因此如果課程內容能夠明確分辨對錯,學生比較容易檢驗自己的理解是否正確。 如果是人文素養類型的課程,則不適合翻轉教育,想要做出「充滿思辨的課程」,比起用影片方式錄製,不如課堂上師生的即時交流來得更加有效。想像一下《正義,一場思辨之旅》的作者是一個人錄製上課影片,就知道效果差異之大。這類課程的目標是訓練批判思考能力、對於人與社會的認知,這是單方面的看影片難以獲得的。 你當然會說有一些國文課很無聊、社會課很無聊,但這並非教學形式的問題,而是老師自身的能力不足,以及體制太過依賴分數來衡量學習成果造成的。當然台灣學生課堂參與度很低也是事實,但這個必須從更小的時候開始改變,不在今天的討論方向。 因此在文末,我給出一個是否應該採用翻轉教育的判斷依據: 如果是課程難度高,學生程度不一,並且需要練習的科目,那翻轉教育可以幫助你 如果問題在於課程無法引起學生的興趣,學生不願意參與討論,那這必須從教學內容與評量標準開始改變 這邊稍微提一下「報告」,我不反對透過學生報告來增加學習評量標準,但必須注意在課程中佔的比重,不該讓學生感到「還沒學到什麼就得做報告」。還需要注意主題和時間長短是否合適,老師也應當在學生遇到問題時提供協助,而不是放生學生自己處理。 結語 做了十幾年的學生,我看過許多老師滿腔熱血,努力嘗試新的教育形式,然而成效卻適得其反。我很感激老師們願意為了更好的學習而努力去改變、去嘗試,因此今天這篇文章並不是要批評你們,而是想從學生的角度,讓老師們了解,什麼才是對學生更好的方式。

January 6, 2020 · 1 分鐘 · wancat

Frozen 2 安全觀影指南

近來 Frozen 2 上映,然而卻傳出許多人受困在 Frozen 世界中的不幸消息,最長的已經失聯長達數週,人身安全有極高的危險。 為什麼 Frozen 能造成這麼大的危險?專家推測,有可能是精緻的動畫和引人入勝的音樂讓人在無意間陷入了 Frozen 世界中,卻無法在電影結束後抽離,稱為 Frozen 症候群。根據估計,Frozen 症候群已經造成不亞於 SAO 的嚴重危機,世界衛生組織也將其列為 2019 年最嚴重的傳染病之一。 如何避免受困 首先,如果可以不看就不要看,假如非看不可,那千萬要做好以下準備,才能提高你存活的機率。 一、不要聽原聲帶。 千萬別小看音樂的力量,也許你在看完電影後以為自己已經平安脫困,但其實危險才正要開始。只要你聽了電影的原聲帶,你的受困風險就會大大增加,哪怕只是一首歌,只要聽到後,身體將會逐漸被冰魔法滲透,讓你不能自己。 到了最後,你將會不斷用 Spotify 聽原聲帶,直到你每首都會唱,甚至收集第一集第二集還有外傳的所有歌,做出一個危險播放清單然後循環播放。此播放清單將會公佈在文章的最後。 二、不要看影評 你以為迪士尼是給小孩子看的嗎?在你看影評前或許是這樣沒錯。千萬別輕易看影評,你將會發現埋藏在 Frozen 中的深刻含意。不看還好,看了不得了,你可能就會從此對它改觀。原本已經安全的逃出了,卻反而陷的更深。 文章的最後我將公佈幾個危險的影評,不要輕易點擊,否則風險自負。 三、不要重看第一集 千萬不要重看第一集。也許你早就看過了第一集,但在你看完第二集後,第一集的殺傷力又會有加乘作用。許多人儘管通過了上面的兩道關卡,然而在重看了第一集後,就失去了抵抗力,只能眼睜睜看著自己被冰凍。 同樣的,Frozen 的兩個短片 Frozen Fever 和 Olaf’s Frozen Adventure 也都是危險的影片,雖然影片不長,但歌同樣好聽,角色同樣可愛,所以假如你已經出現了 Frozen 症候群,這兩部短片將會加重你的病情。 高風險族群 以下列出幾個 Frozen 症候群的高風險族群,如果你在以下族群之中,你對 Frozen 將會有較弱的抵抗力,請斟酌是否要前往觀影: 姐妹控、百合控 不要懷疑,男主角 Kristoff 完全就是煙霧彈,兩位女主角 Elsa 和 Anna 才是真愛!尤其是第二集,沒有了第一集的枷鎖,Elsa 和 Anna 每場戲都是全糖去冰!真香、真香。這百合毒性很強,在做好防護措施前,千萬別輕易嘗試。 畫面控 如果你對於精緻的畫面情有獨鍾,那 Frozen 2 將會對你非常危險,這次的動畫品質跟六年前的 Frozen 已經不可相提並論,不論在場景、服裝、人物表情都變得更加栩栩如生,看了真的非常享受…不,是危險!小心不要被視覺所迷惑了! 尤其 Frozen 2 擺脫了過去「公主總是穿裙子」的設定,以角色的實際需求出發,設計好看又實用的褲裝。隨著動畫技術的進步,衣服的材質做得更加真實,衣服上的每個細節都看得出細膩的設計。...

December 22, 2019 · 1 分鐘 · wancat

CTF 參加初體驗

CTF 參加初體驗 承蒙朋友邀請,我人生首度參加資訊安全競賽——政府舉辦的資安金盾獎,本來就預期會很難,但沒想到會這麼難,深深感受到有一個世界等著去探索。 在報名時有個小插曲,本人就讀五專,現在是高一的年紀,然而我的學校在報名網被歸類在大專組,這樣我就無法和其他高中的友人 TNPLR 一同參加。為此我寫信去跟主辦單位反應,主班單位就添加了五專部的選項,實在令人感動,可見主辦單位的誠意。 初賽 設備 初賽的設備我覺得挺神奇的,首先不能帶自己的電腦、儲存裝置,手機不能用,主辦單位提供的是一台 Windows 電腦,並且要「連到虛擬機」作答,然而虛擬機還是 Windows,我不懂為何不用實體機就好了? 作答過程不能連上外網,也就是說沒辦法查資料,我本來就夠弱了,沒辦法搜尋就更弱了。只能用 Windows 電腦也是個很大的障礙,工具很不足,Base64 這種基本工具都沒有… 沒網路又不能用線上工具。我在此建議大會,既然使用了虛擬機,就提供 Linux 這個選項,不然對於長年不使用專有作業系統的人來說實在不友善。 題目 雖然只是初賽,但每題都很難,我們在 Crypto、Web 和 Misc 都稍有斬獲,但最終都沒有解出來,全部輸掉。但很神奇的是,在兩週之後,我們竟然收到了決賽通知書,還是從 98 中剩餘的 15 隊。我們推測之後認為應該是題目有錯,導致當天顯示錯誤,但其實有答對,否則不可能隨便挑 15 隊進入決賽。 無論真相為何,既然進入了決賽,就要好好比。 決賽 決賽場地位於張榮發基金會,決賽比五個小時,國高中組有十題題目,題目分數為 100 三題、200 四題、300 三題。試題範圍跟初賽一樣,但沒有特別標注哪題是哪種類型,以下將根據我的觀察進行分類。 設備 決賽使用個人的電腦,並且可以上外網,這樣真的好很多,不需要用彆扭的 Windows,我也先裝好資安方面的 Linux 虛擬機——Kali,但還沒熟悉其中的工具,所以其實沒有很大的幫助。 雖然可以上外網,但比賽禁止與「外部通訊」,意思是不能和隊員以外的人類溝通,我覺得這個用字要再精確一點,因為瀏覽網頁其實也是一種「與外部通訊」,避免造成選手誤會。 既然是比資安比賽,當然就要破解漏洞,在比賽後我想到了一種安全的通訊方式。假設有兩個隊伍 A 和 B,A 事先在賽前跟 B 約好一個通訊埠和一組帳密,比賽開始後,A 在他的電腦架設一個 SSH Server,並使用事前約定好的埠口,然後 B 就用 nmap 掃描區網所有電腦,掃到事前約定好的埠口就代表該主機是 A 隊,然後就可以用約定好的帳密登入進去了。 這個作法有多種安全性,首先,這個過程完全就是操作終端機,看起來跟平常解 CTF 並無二異。第二,因為使用 SSH,所以通訊過程是加密的,主辦單位也不知道。那有了這個通訊方法後,就可以透過把 flag 留在伺服器中的某個檔案的方式來交換答案。 但有個大漏洞是:主辦單位可以發現兩個不同隊伍的 IP 有通訊的行為,雖然不知道通訊內容為何,但還是有可能會因此被舉發,所以好孩子還是不要嘗試喔! TNPLR 他的筆電是學校發的,規定上不能自己改系統,而且是 Microsoft Surface Go,為此他另外帶了一直以來當 NAT 使用的 10 年古董筆電,在賽前晚上灌了 Fedora Server,我也灌了一支 Kali Live USB 給他的 Surface Go 使用,事後證實這支 USB 幫了很大的忙。...

November 16, 2019 · 2 分鐘 · wancat