【IT】機械学習を用いると匿名のソースコードから個人を識別可能であることが判明
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語を用いて書かれた「ソースコード」はあらかじめ定められた規則に従って記述する必要があり、匿名で公開されたコードから個人を識別することは困難に思えるかもしれません。ところが、実際にはコードにも個人の特徴が色濃く表れており、機械学習を用いてコードのサンプルから個人を識別できることが判明しました。
ドレクセル大学のコンピューターサイエンス准教授であるレイチェル・グリーンシュタット氏と、ジョージ・ワシントン大学でコンピューターサイエンスの准教授を務めるアイリン・カルスキン氏は、プログラミング言語で書かれたコードは完全に匿名のものではなく、機械学習を用いて個人を識別可能だという研究結果を発表しました。
2人は機械学習のアルゴリズムにコードサンプルを分析させ、用いた言葉の選択やコードの長さ、コードのまとめ方といったあらゆる特徴を抽出しました。次に2人は抽出された特徴の中から、開発者個人を識別するのに役立つ特徴のみを選別し、コードから個人を特定する時に注目するべきリストを絞り込んだとのこと。コードの書き手は通常の文章と違い、一定の規則に従ってコードを書き進めなければならないという制約がありますが、それでもコードから個人を識別可能な特徴を抽出できるようです。
また、コードサンプルは非常に長いものである必要があるわけでもなく、グリーンシュタット氏らが発表した2017年の論文(PDF)によればGitHubに公開されたほんの短いコードの断片であっても、特定の開発者とそれ以外の開発者を識別できるとのこと。加えて、すでに0と1で表される機械語にコンパイルされたコードからでも、個人の識別が可能だとカルスキン氏は述べました。
カルスキン氏らの研究チームは、Googleが開催するプログラミングコンテストのGoogle Code Jamで書かれたコードをもとに、100人の開発者が書いたコードをアルゴリズムに識別させました。すると、実に96%の精度で個人を識別することができたとのこと。また、識別する開発者数を600人にまで拡大した場合でも、83%の精度で個人を識別できたとしています。
グリーンシュタット氏とカルスキン氏は、プログラミングを勉強する学生が他のコードを盗用したのかどうかを判断する場合や、マルウェアの開発者を特定する時などにコードから個人を識別するAIが役立つとしています。また、関係のない第三者を装って行われたサイバー犯罪に対しても、背後にいる人物の存在をあぶり出すことができるとのこと。
一方でオープンソースプロジェクトに匿名で参加しているプログラマーや、匿名でコードを公開しているプログラマーのプライバシーが脅かされる可能性もあります。「コード開発者の身元を100%隠すことは、一般的に考えて難しいと理解する必要があります」とグリーンシュタット氏は述べており、将来的にはコードから個人を識別不可能にするツールが開発されるかもしれないが、しばらくは匿名で公開したコードから個人を特定される危険性があるとしました。
また、グリーンシュタット氏らはプログラミングの初級者と上級者では、上級者のほうが個人を識別しやすいという事実も発見しました。これは、初心者がコードの一部をプログラミング練習サイトからコピーしてくる場合があって特徴が出にくいのに対し、上級者になればなるほどコーディングがこなれてきて、個人間に差異が出やすいためだそうです。他にも、2人はコードのサンプルが「簡単な問題を解決するために書かれたコード」である場合よりも、「複雑な問題を解決するために書かれたコード」である場合のほうが個人の識別精度が向上することも突き止めました。
グリーンシュタット氏らが行った予備調査では、カナダ人の書いたコードと中国人の書いたコードを90%以上の精度で判別できるなど、コードから得られる情報は予想以上に多いようです。記事作成時点では、コードによる個人の識別は指紋による個人識別のように100%に近い精度を持っているわけではありませんが、今後さらに識別精度が向上していくだろうと考えられています。
https://gigazine.net/news/20180813-machine-learning-identify-code-authors/ そりゃ筆跡鑑定が可能なんだからそれくらいできんだろ 公開されてるコードが全部匿名なら、個人を判別できないし
匿名でなく活動してるなら、ばれたところで
へー意外な所にコントリビューションしとるんやね
ってなるだけだから、別に困らんやろ
そんなことに使うぐらいなら、あんたはこんなバグ
いれやすいねやで、って警告でもしたら有益なんちゃう? >>4
アホやな、筆跡鑑定を自動でやるのは
どうしとるんや? 個人の特色は絶対に出るから当たり前のことのように思えるけど
判別できたら、どうなるん? >>3
コーティング規約に沿っていても、変数の作り方、宣言の仕方、初期化の仕方色々癖は出る。 >>8
別にそれだけ。
その結果は別の何かと結び付けられて考えられるかも知らない。
でもそれはまた別のお話。 >>1
ポールグラハムのスパムフィルターで十分だろw タイピングの各文字間の打刻時間差で個人が判別可能ってのは15年くらい前に見たよなあ
人によって一文字ごとの撃つタイミングに癖があるから ふーん
まぁ、癖ってあるだろうからね
その人のソースコードが多ければ多いほど、特定できる可能性も高まるだろうね メーカーが仕様を公開していない機器のオープンソースのデバイスドライバ、
みたいな、使う側には非常に有り難いけれど出所が突き止められたらヤバそうな
プログラムソースもあるからなぁ。 すると、作詞作曲も実際の作者が違うことがわかるんですね? >>23
ねーよ
オブファスケーションするからまずわからない 「facebook等からパターンを学習させることで、5chのレスから筆者を推定します」
こういうのが出てきたら一部に需要があるかもしれん ここの書き込みの文章の癖から
個人特定するのなんかすぐなんだろうなw コードの体裁じゃなくて構造から特定するなら面白そう まあデータが膨大ならパラメータ不明のブラックボックスだし
2度と同じものも作れない 「だから?」で済むよ >>32
何やってんだよ
せめてselfとかthisぐらいにしとけよ >>27, >>29
だよなー
有名作家が別の著作者としてエロ小説書いてるのを特定みたいな状況でしか役に立たない気がする 職場だとauthor書かされるから別にメリットなし(´・ω・`) >>16
限られたメンバー内であればコード読めばなんとなく誰が書いたかわかるからな
機械学習のような手法を使えば癖を読む精度を上げられそうなのは当然だろう hogehogeのかわりにhigehigeって埋め込んだコードが俺だとばれてしまう… >>28
俺はインスタもFBもツイッターもしないから無敵 書き手のわかってるソースコードのデータがないとだめ
しかもコードの書き方に100通りぐらいのタイプがあるとして
100人の中から識別するならあるていど特定できても
100万人の中から識別するなら誰だか特定するのは難しそう
そもそもソースコードを公開しつつ
誰が書いたのか伏せたいような状況はかなり限られる >>37
今時authorとか律儀に書いてるの?
gitとかでわかるやん C言語なら分かりそうな気もするが
Pythonでも分かる? 5chは非匿名だと思っていないので、見られてもいいような事しか書いていない。 ・
C言語も
Pythonも 関係ねぇーだろ。
ソースコードを単語ごとに分解して それ 頻度ごとに並べ替えて つながりを分析すれば
指紋みたいなものが分かるってことだろ。
っていうかぁ
ソースコードそのものを AIで作れって話に 進まないとおかしい。けど
こんなのは 序の口。 javascriptとか圧縮かけてもわかるのかな? >>53
2ちゃんの書き込みの
クセを分析して
書いた人ごとに集約して表示するサイトでもできると
困ったことになるかもな
まあ
おれは個人情報ほとんど書かないけど 他人のソースコードのコピペでコードを書く俺はどう判定されるんだろう まぁ一緒にやっていても癖で大体わかるようになるしな
パターン覚えれば大体判別はできるだろう これはこれで対抗手段の出現、すなわちコードから個人の癖を消す技術の開発へと進化するだろうね 関数型とかRustとかイミュータブルかつ式文な言語だと
問題解決の最適式バリエーション減って判別しにくいとか有るんじゃね? 関数型というかPascal系のシンタクスだと複数の書き方ができなくて個性が出にくいというのはありそう
というかそれがウリの言語だし コピペプログラマーに対しては複数の引用元の特徴がごちゃ混ぜになって
わけわからんことになりそう >>68
ないない、識別するメリットがほぼないし、識別されて困ることもほぼない 誰が書いても同じようなコードになるとされるPythonでも? まあ、整形の仕方に多少でも自由度があれば書いた人の個性が出るからなあ。 整形を統一してくれるソフトウェアを潜らせればどうなのかな? 設計思想を解読してるわけだから、設計の良し悪しを判断させられる方向にもってこう >>66
名倉柏木判定プログラムならすでに公表されてる 最適化通したあとのバイナリでも識別可能とかうそくせ やばいあの金融機関をあそこまで追い込んだ犯人がバレちゃう ゆうくんの無実が証明できるんだな。
もしくはソースコードの著作権訴訟に使えるかもね。
ただし機械学習で正しい答えを回答させるのに、5000ケース位正解例を読み込ませて学習させる必要がある。
また口語文体ではなく、法則性のあるソースコードの著者探しはAIにとっては簡単だろう。 複数の誰かが書いたのをパッチワークしてるとどうなるんだろう?
継ぎ接ぎだらけだから特定の個人を識別するのは不可能だと思うが? コンピュータウイルスを作った犯人を特定できるんだろうか? ブロックチェーンの未来と合わせて考えると、結構インパクト有りそうだな。 癖が出るよね
AAで遊ぶやつとか
会社やめたい とか一言コメントソースコードに入れるのやめろw 機械学習以前の問題。
文字列の中に、自分の名前や適当なフレーズを入れておくことができるし。 実行するたびにアセンブラレベルでバイナリの配置置き換えて暗号化したらどうなるんだろうか >>96
ソースコードを見るんだからそんなことしても意味ない んでも、そこまでソースコード書いてない、公開されてない人なら
特定までには至らないよね!
同じコーディング規則を使っている組織とか、参考書とかは手繰れるだろうけど 変数名を意味が通らないなんちゃって英語でかいているとすぐばれるぞ カラム名で区分がkbnだったときに、その先の苦労が予見できて速攻辞めた 写真を一切修正しない下着ブランド「エアリー」は、無理したくない女性たちの心をわかっている
http://news.www.yodyiam.com/live/1534251776/ 写真を一切修正しない下着ブランド「エアリー」は、無理したくない女性たちの心をわかっている
http://news.www.yodyiam.com/live/1534251776/ BCASカードをハッキングしたヤツを??!!
ってコード類は複数がかかわってそうだけど >>73
先ず、山中伸弥と小保方晴子のそれぞれの研究論文を100報用意し、ホンモノと捏造研究を分類する学習モデルを作成します
次に、この分類器を使って東大医学部が出した最新医学論文を予測します、すると… ボクこんな事できるんだよ〜凄いでしょ〜
もっと褒めて! ■ このスレッドは過去ログ倉庫に格納されています