Cerimônia de configuração confiável na cadeia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Cerimônia de configuração confiável na cadeia

A cerimônia de configuração confiável é uma das dores – e empolgação – das comunidades de criptomoedas. O objetivo de uma cerimônia é gerar chaves criptográficas confiáveis ​​para proteger carteiras de criptomoedas, protocolos blockchain ou sistemas à prova de conhecimento zero. Esses procedimentos (às vezes extravagantes) são frequentemente a raiz da confiança para a segurança de um determinado projeto e, portanto, são extremamente importantes para acertar.

Os projetos Blockchain realizam cerimônias de várias maneiras criativas – envolvendo maçaricos, poeira radioativa e aviões – mas todos compartilham algo em comum: todos envolvem um coordenador centralizado. Com este trabalho demonstramos como descentralizar o processo substituindo o coordenador centralizado por um contrato inteligente. Além disso, estamos abrindo o código-fonte de uma biblioteca que permite que qualquer pessoa realize tal cerimônia - conhecida pelos praticantes de criptomoedas como uma Kate-Zaverucha-Goldberg (KZG) ou cerimônia de “poderes de tau” – na cadeia Ethereum. Qualquer pessoa pode participar simplesmente pagando as taxas de transação!

Nossa abordagem descentralizada tem limitações, mas ainda é útil. Devido às atuais restrições de dados on-chain, o tamanho dos parâmetros criptográficos deve ser curto, ou seja, não mais que 64 KB. Mas o número de participantes não tem limite e as pessoas podem continuar enviando contribuições perpetuamente. As aplicações para esses parâmetros curtos incluem pequenos SNARKs de conhecimento zero, amostragem de disponibilidade de dados e Verkle árvores.

História e mecânica da cerimônia de configuração confiável

Em uma típica cerimônia de configuração confiável, um grupo de participantes gerará colaborativamente um conjunto de parâmetros criptográficos. Cada parte participante usa informações secretas, geradas localmente, para gerar dados que ajudam a criar esses parâmetros. As configurações adequadas garantem que os segredos não vazem, que os segredos sejam usados ​​apenas conforme designado pelo protocolo e que esses segredos sejam completamente destruídos no final da cerimônia. Contanto que pelo menos uma das partes na cerimônia se comporte honestamente, não seja comprometida e destrua seu segredo local, toda a configuração pode ser considerada segura. (Claro, isso supondo que a matemática esteja correta e o código não tenha bugs.)

Algumas das cerimônias mais importantes foram administrado por Zcash, um projeto de blockchain orientado à privacidade. Os participantes dessas cerimônias geraram parâmetros públicos projetados para permitir que os usuários do Zcash construíssem e verificassem transações privadas de criptomoedas. Seis participantes realizaram a primeira cerimônia Zcash, Sprout, em 2016. Dois anos depois, o pesquisador de criptomoedas Ariel Gabizon, agora cientista-chefe da asteca, encontrado um bug devastador no desenho da cerimônia que foi herdada de um artigo de pesquisa fundamental. A vulnerabilidade poderia ter permitido que os invasores criassem moedas Zcash ilimitadas sem serem detectados. A equipe Zcash manteve a vulnerabilidade em segredo por sete meses até que uma atualização do sistema, Sapling, cuja cerimônia envolveu 90 participantes, abordou o problema. Embora um ataque baseado na falha de segurança não tenha afetado a privacidade das transações dos usuários, a perspectiva de falsificação infinita minou a premissa de segurança da Zcash. (É teoricamente impossível saber se ocorreu um ataque.)

Outro exemplo notável de uma configuração confiável é o cerimônia perpétua de “poderes-de-tau” projetado principalmente para Semáforo, uma tecnologia de preservação de privacidade para sinalização anônima no Ethereum. A configuração usou uma curva elíptica BN254 e teve 71 participantes até agora. Outros projetos proeminentes usaram mais tarde essa configuração para executar suas próprias cerimônias, incluindo Tornado.Cash (recentemente sancionada pelo governo dos EUA), hermez rede e Loopring. asteca realizou uma cerimônia semelhante em uma curva elíptica BLS12_381 com 176 participantes para o zkSync, uma solução de dimensionamento Ethereum de “camada dois” que usa zero rollups de conhecimento. Filecoin, um protocolo de armazenamento de dados descentralizado, realizou uma cerimônia com 19 e 33 participantes, na primeira e na segunda fase, respectivamente, bifurcando o repo original. Zelo, uma blockchain de camada 1, também realizou uma cerimônia para seu cliente leve Plumo.

As cerimônias perpétuas não têm limite para o número de participantes. Em outras palavras, em vez de confiar em outras pessoas para realizar uma cerimônia de configuração confiável, QUALQUER UM pode participar em qualquer grau de segurança que satisfaça sua satisfação. Um único participante confiável garante a segurança de todos os parâmetros resultantes; a corrente é tão forte quanto seu elo mais forte. Cerimônias perpétuas podem ser executadas, como o nome indica, em perpetuidade, como era a premissa da cerimônia original de poderes de tau. Dito isso, os projetos geralmente decidem um horário concreto de início e término para suas cerimônias, dessa forma eles podem incorporar os parâmetros resultantes em seus protocolos e não precisam se preocupar em atualizá-los continuamente.

Ethereum planeja realizar uma cerimônia de configuração confiável menor para os próximos Fragmentação ProtoDank e DankShardingGenericName Atualizações. Essas duas atualizações aumentarão a quantidade de dados que a cadeia Ethereum fornece aos clientes para armazenamento. Esses dados terão uma expiração de 30 a 60 dias. A cerimônia é em desenvolvimento ativo, e é planejado para funcionar por seis semanas no início do próximo ano. (Ver kzg-cerimônia-especificações para mais detalhes.) Está se tornando a maior cerimônia de configuração confiável para blockchains executada até agora.

A paranóia é uma virtude quando se trata de cerimônias de configuração confiáveis. Se o hardware ou software de uma máquina estiver comprometido, isso pode prejudicar a segurança dos segredos que ela gera. Ataques de canal lateral sorrateiros que vazam segredos também podem ser difíceis de descartar. Um telefone pode espionar as operações de um computador gravação de ondas sonoras de vibrações da CPU, por exemplo. Na prática, como é imensamente difícil eliminar todos os possíveis ataques de canal lateral – incluindo aqueles ainda a serem descobertos ou divulgados – existem até propostas para levar máquinas ao espaço para realizar cerimônias lá.

Por enquanto, a cartilha para os participantes sérios da cerimônia normalmente é a seguinte. Compre uma máquina nova (hardware não contaminado). Afaste-o removendo todas as placas de rede (para evitar que segredos locais saiam da máquina). Execute a máquina em uma gaiola de Faraday em um local remoto não revelado (para frustrar possíveis bisbilhoteiros). Semeie o gerador de segredos pseudo-aleatórios com muita entropia e dados de replicação física, como teclas aleatórias ou arquivos de vídeo (para tornar os segredos difíceis de decifrar). E, finalmente, destrua a máquina – junto com quaisquer vestígios dos segredos – queimando tudo em cinzas. 😀

Coordenação de cerimônias de configuração confiável

Aqui está uma seleção divertida de citações de alguns participantes confiáveis ​​​​da cerimônia de configuração anterior:

  • "…o maçarico foi usado para aquecer metodicamente a eletrônica completamente peça por peça até que tudo estivesse enegrecido…”- Peter Todd em destruir fisicamente os segredos locais.
  • “Tenho aqui um pedaço de tecido que tem pó de grafite [do] núcleo do reator [de Chernobyl]… Você conta a cada quatro pulsos [de um contador Geiger ligado a um microcontrolador] e compara o intervalo de tempo entre o pulso um e o dois e o intervalo de tempo entre o pulso três e quatro e se for maior, você obtém um zero, se for menor, obtém um. “… estamos prestes a entrar neste avião e gerar nossos números aleatórios…” - Ryan Pierce e Andrew Miller na geração secreta.

A 41ª rodada da cerimônia dos poderes de tau Zcash envolveu um avião. Captura de tela: vídeo do YouTube

  • "O vendedor disse que tinha 13 [computadores]. Perguntei se poderíamos escolher um dos 13. Ele perguntou se havia algo que eu estava procurando em particular (confuso porque eles são todos iguais) e eu disse que só queria escolher um aleatório. Ele disse que não podia nos deixar entrar no armazém dos fundos. Perguntei se ele traria dois deles para que pudéssemos escolher um dos dois. Ele trouxe dois em um carrinho de mão. Jerry selecionou um dos dois computadores e nós o levamos ao caixa para conferir.”- Peter Van Valkenburgh em obter uma nova máquina.
  • "As primeiras horas da cerimônia foram realizadas em uma gaiola de Faraday improvisada feita de papel alumínio e filme plástico. Tirei o laptop da gaiola de Faraday, pois tinha pouca ventilação e estava ficando quente ao toque”- Koh Wei Jie na proteção do canal lateral.
  • ".. realizou uma parte da cerimônia nas montanhas sem vizinhos.”- Michael Lapinski na proteção do canal lateral.
  • "Optei por usar o vídeo do ambiente para gerar entropia suficiente”- Muhd Amrullah na geração de valores aleatórios.
Cerimônia de configuração confiável na cadeia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Za Wilcox, irmão da cofundadora da Zcash Zooko Wilcox, destruindo um computador usado para gerar números aleatórios para uma cerimônia confiável em 2016. Foto: Morgen Peck

Todas essas cerimônias contavam com um coordenador centralizado. O coordenador é um servidor individual ou privado ou alguma outra entidade encarregada de registrar e ordenar os participantes, atuar como retransmissor, encaminhando informações do participante anterior para o próximo, e manter um registro centralizado de todas as comunicações para fins de auditoria. O coordenador normalmente também é responsável por disponibilizar o log ao público em perpetuidade; claro que euÉ sempre uma possibilidade com um sistema centralizado para que os dados sejam perdidos ou mal gerenciados. (Perpetual-powers-of-tau, por exemplo, é armazenado no Microsoft Azure e no Github.)

Pareceu-nos irônico que os projetos de criptografia devam contar com cerimônias de configuração confiáveis ​​centralizadas quando a descentralização é um princípio fundamental do ethos de criptografia. Então decidimos demonstrar a viabilidade de realizar uma pequena cerimônia para poderes perpétuos de tau diretamente na blockchain Ethereum! A configuração é totalmente descentralizada, sem permissão, resistente à censura e segura, desde que qualquer um dos participantes seja honesto [consulte renúncias]. Participar da cerimônia custa apenas 292,600 a 17,760,000 gás (cerca de US$ 7 a US$ 400 a preços atuais), dependendo do tamanho dos parâmetros resultantes desejados (neste caso entre 8 e 1024 potências de tau). (Veja a tabela abaixo para custos concretos – entraremos em mais detalhes sobre esses cálculos posteriormente no post.)

Cerimônia de configuração confiável na cadeia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Por enquanto, aconselhamos não usar o código para nada além de fins experimentais! Agradeceríamos muito se alguém que encontrasse algum problema com o código os relatasse para nós. Adoraríamos coletar feedback e auditorias de nossa abordagem.

Entendendo a cerimônia KZG ou 'poderes-de-tau'

Vamos explorar uma das configurações confiáveis ​​mais populares, que é conhecida como cerimônia KZG, ou “powers-of-tau”. Crédito ao cofundador da Ethereum, Vitalik Buterin, cuja postagem no blog sobre configurações confiáveis informado nossas idéias nesta seção. A configuração gera as codificações dos poderes-de-tau, assim chamados porque “tau” passa a ser a variável usada para expressar os segredos gerados pelos participantes:

pp = [[𝜏]1, [𝜏2]1, [𝜏3]1, ..., [𝜏n]1; [𝜏]2, [𝜏2]2, ..., [𝜏k]2]

Para algumas aplicações (por exemplo, Groth16, um popular esquema de prova zkSNARK projetado por Jens Groth em 2016), esta primeira fase da configuração é seguida por uma segunda fase, uma cerimônia de computação multipartidária (MPC), que gera parâmetros para um circuito SNARK específico . No entanto, nosso trabalho se concentra apenas na fase um. Esta primeira fase – a geração das potências de tau – já é útil como um bloco de construção fundamental para SNARKs universais (por exemplo, PLONK e SONIC), bem como outras aplicações de criptografia, como Compromissos KZG, Verkle árvores e amostragem de disponibilidade de dados (DAS). Geralmente, os parâmetros SNARK universais devem ser muito grandes para que possam suportar circuitos grandes e úteis. Circuitos que contêm mais portas são geralmente mais úteis, pois podem capturar grandes cálculos; o número de potências de tau corresponde aproximadamente ao número de portas no circuito. Assim, uma configuração típica será de tamanho |pp| = ~40 GB e capaz de suportar circuitos com ~228 portões. Dadas as restrições atuais do Ethereum, seria inviável colocar parâmetros tão grandes na cadeia, mas uma cerimônia de configuração confiável menor, útil para pequenos circuitos SNARK, árvores Verkle ou DAS, pode ser executada na cadeia.

A Fundação Ethereum está planejando executar vários cerimônias para potências de tau de tamanho de 200 KB a 1.5 MB. Enquanto cerimônias maiores podem parecer melhores, dado que parâmetros maiores podem criar circuitos SNARK mais úteis, maiores são, de fato, nem sempre melhores. Certos aplicativos, como o DAS, precisam especificamente de um menor! [O motivo é muito técnico, mas se você estiver curioso, é porque uma configuração com n potências (em G1) permite apenas compromissos KZG para polinômios de grau ≤ n, o que é crucial para garantir que o polinômio sob o compromisso KZG possa ser reconstruído a partir de quaisquer n avaliações. Esta propriedade permite a amostragem de disponibilidade de dados: cada vez que t avaliações aleatórias do polinômio são obtidas (amostradas) com sucesso, isso dá uma garantia de que o polinômio pode ser totalmente reconstruído com probabilidade t/n. Se você quiser saber mais sobre o DAS, confira este post de Buterin no fórum Ethereum Research.]

Projetamos um contrato inteligente que pode ser implantado no blockchain Ethereum para executar uma cerimônia de configuração confiável. O contrato armazena os parâmetros públicos – os poderes-de-tau – totalmente on-chain e coleta a participação por meio de transações dos usuários.

Um novo participante lê primeiro esses parâmetros:

pp0 = ([𝜏]1, [𝜏2]1, [𝜏3]1, ..., [𝜏n]1; [𝜏]2, [𝜏2]2, ..., [𝜏k]2),

em seguida, amostra um segredo aleatório 𝜏' e calcula os parâmetros atualizados:

pp1 = ([𝜏𝜏']1, [(𝜏𝜏')2]1, [(𝜏𝜏')3]1, …, [(𝜏𝜏')n]1; [𝜏𝜏']2, [(𝜏𝜏')2]2, …, [(𝜏𝜏')k]2),

e os publica on-chain com uma prova que demonstra três coisas:

  1. Conhecimento de log discreto: o participante sabe 𝜏'. (Uma prova de que a última contribuição para a cerimônia de configuração confiável se baseia no trabalho de todos os participantes anteriores.)
  2. Bem-formado do pp1: os elementos de fato codificam poderes incrementais. (Uma validação da boa formação da contribuição de um novo participante para a cerimônia.)
  3. A atualização não está apagando: 𝜏' ≠ 0. (Uma defesa contra invasores que tentam minar o sistema excluindo o trabalho anterior de todos os participantes.)

O contrato inteligente verifica a prova e, se estiver correto, atualiza os parâmetros públicos que armazena. Você pode encontrar mais detalhes sobre a matemática e o raciocínio por trás dela no repo.

Calculando os custos do gás

O principal desafio de executar a configuração on-chain é tornar a cerimônia de configuração confiável o mais eficiente possível em termos de gás. Idealmente, enviar uma contribuição não custaria mais de ~$50. (Grandes projetos podem ser capazes de subsidiar o gás para os contribuintes, caso em que é mais fácil imaginar centenas de participantes gastando US$ 100 cada). Abaixo, damos mais detalhes sobre as partes mais caras da configuração. Custos mais baixos de gás reduziriam o custo das contribuições e permitiriam a construção de parâmetros mais longos (mais potências tau e circuitos SNARK maiores)!

Nossa configuração funciona para a curva elíptica BN254 (também conhecida como BN256, BN128 e alt_bn128), que tem suporte para os seguintes contratos pré-compilados no Ethereum:

  • ECADD permite que dois pontos de curva elíptica sejam adicionados, ou seja, calcular [𝛼+𝛽]1 de [𝛼]1 e [𝛽]1: custo do gás 150
  • ECMULT permite que os pontos da curva elíptica sejam multiplicados por um escalar, ou seja, calcular [a*𝛼]1 de a e [𝛼]1: custo do gás 6,000
  • ECPAIR permite que um produto de pares de curvas elípticas seja verificado, ou seja, calcular e([𝛼1]1, [𝛽1]2)* … *e([𝛼1]1, [𝛽1]2) = 1 o que equivale a verificar que 𝛼1*𝛽1+… + 𝛼k*𝛽k = 0: custo do gás 34,000 * k + 45,000

O Ethereum pode habilitar o BLS12_381 (conforme proposto em EIP-2537), nosso contrato de configuração pode ser facilmente feito para funcionar também para essa outra curva.

Vamos estimar o custo do gás para atualizar a configuração para ([𝜏]1, [𝜏2]1, [𝜏3]1, ..., [𝜏n]1; [𝜏]2):

  1. Custo do gás de verificação da prova. Cada participante atualiza a configuração e envia uma prova com três componentes, conforme descrito acima. Os componentes 1 e 3 da prova – “conhecimento de log discreto” e “atualização não apagada” – são muito baratos de verificar. O desafio está em verificar o componente 2, “bem formada das pp1”, na cadeia. Requer uma grande multiplicação multi-escalar (MSM) e dois pares:
    e(𝝆0[1]1 + 𝝆1[𝜏]1 + 𝝆2[𝜏2]1 +… + 𝝆n-1[𝜏n-2]1, [𝜏]2) = e([𝜏]1 + 𝝆1[𝜏2]1 +… + 𝝆n-1[𝜏n-1]1, [1]2),
    onde 𝝆0,…,𝝆n-1 são escalares pseudo-amostrados aleatoriamente. Em termos de contratos inteligentes pré-compilados, seriam necessários:
    (2n-4) x ECADD + (2n-4) x ECMULT + ECPAIRk = 2 = (2n-4) x 6,150 + 113,000 gás.
  2. Custo do gás de armazenamento de dados. Cada participante também armazena a atualização na cadeia como dados de chamada (68 gás por byte) contabilizando n*64*68 gás. (Uma observação para aqueles familiarizados com criptografia de curva elíptica: armazenar pontos compactados faria com que a descompressão dominasse o custo geral de acordo com nossas medidas para n = 256.)

Isso nos leva à tabela a seguir, estimando os custos do gás, que deve informar otimizações futuras:

Cerimônia de configuração confiável na cadeia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Estamos explorando soluções para reduzir o custo do gás, portanto, fique atento!

Biblioteca de código aberto: evm-powers-of-tau

Abrimos o código-fonte do nosso repositório de cerimônias de poderes de tau baseado em EVM em github.com/a16z/evm-powers-of-tau. Realizar uma cerimônia com nossa estratégia é fácil e transparente:

  1. Implantar o contrato de armazenamento e verificação (contratos/KZG.sol)
  2. Um contribuidor lê os parâmetros de cerimônia de calldata de transação anterior
  3. O colaborador gera um segredo localmente, calcula os parâmetros atualizados
  4. O colaborador gera sua prova: pi1, pi2
  5. O colaborador envia os parâmetros atualizados via KZG.potUpdate() para o contrato inteligente implantado no blockchain público
  6. O contrato inteligente verificará a validade da atualização, revertendo no caso de um envio malformado
  7. Múltiplos colaboradores podem executar as etapas 2 a 5 perpetuamente, cada uma aumentando a segurança da cerimônia
  8. Sempre que um desenvolvedor estiver confiante com o número e a qualidade dos envios, ele poderá consultar o blockchain para os parâmetros atuais e usar esses valores como suas chaves criptográficas

Nosso repositório usa arkworks-rs para calcular os passos dois e três (o cálculo da ferrugem pode ser encontrado em src/pot_update.rs), mas os usuários podem querer escrever seus próprios. Todo o fluxo de envio de atualização de ponta a ponta pode ser encontrado no teste de integração em testes/integration_test.rs.

Observe que escolhemos usar calldata para armazenar parâmetros atualizados de potências de tau na cadeia, pois é várias ordens de magnitude mais barato que o armazenamento. Uma consulta baseada em ethers-rs para esses dados pode ser encontrada em src/query.rs.

Finalmente, provas e equações detalhadas podem ser encontradas no relatório técnico em relatório técnico/main.pdf.

Trabalho futuro

Antes que essa cerimônia de configuração confiável possa ser usada na produção, recomendamos primeiro uma auditoria abrangente das provas matemáticas e da implementação de amostra.

Conforme implementado, o custo de transação de atualização da cerimônia cresce linearmente com o tamanho da configuração. Para a maioria dos aplicativos (SNARKs, DAS), gostaríamos de uma configuração de n >= 256, atualmente custando US$ 73 por atualização. 

Podemos conseguir um crescimento de custo de verificação sublinear com uma prova STARK da computação de atualização válida e um compromisso vetorial com os valores atualizados. Essa construção também removeria a dependência das pré-compilações do Ethereum L1 BN254, permitindo o uso da curva BLS12-381 mais popular.

Todas as estratégias de cerimônia têm compensações. Achamos que esta construção é sólida e tem grandes propriedades de resistência à censura verificáveis. Mas, novamente, alertamos contra o uso desse método até que mais trabalho seja feito para verificar a solidez de nossa abordagem.

Agradecimentos

  • Dan Boneh – para feedback útil nos estágios iniciais deste trabalho
  • Joe Bonneau – por esclarecer a exposição na versão inicial do relatório técnico
  • William Borgeaud – para discussão sobre BLS dentro do TurboPlonk / Plonky2
  • Mary Maller – para reflexões sobre a mecânica geral da abordagem

Editor: Robert Hackett @rhhackett

***

As opiniões expressas aqui são as do pessoal individual da AH Capital Management, LLC (“a16z”) citadas e não são as opiniões da a16z ou de suas afiliadas. Certas informações aqui contidas foram obtidas de fontes de terceiros, inclusive de empresas do portfólio de fundos administrados pela a16z. Embora retiradas de fontes consideradas confiáveis, a16z não verificou essas informações de forma independente e não faz representações sobre a precisão atual ou duradoura das informações ou sua adequação a uma determinada situação. Além disso, esse conteúdo pode incluir anúncios de terceiros; a16z não revisou tais anúncios e não endossa nenhum conteúdo de publicidade neles contido.

Este conteúdo é fornecido apenas para fins informativos e não deve ser considerado como aconselhamento jurídico, comercial, de investimento ou fiscal. Você deve consultar seus próprios conselheiros sobre esses assuntos. As referências a quaisquer valores mobiliários ou ativos digitais são apenas para fins ilustrativos e não constituem uma recomendação de investimento ou oferta para fornecer serviços de consultoria de investimento. Além disso, este conteúdo não é direcionado nem destinado ao uso por quaisquer investidores ou potenciais investidores, e não pode, em nenhuma circunstância, ser invocado ao tomar uma decisão de investir em qualquer fundo administrado pela a16z. (Uma oferta para investir em um fundo a16z será feita apenas pelo memorando de colocação privada, contrato de subscrição e outra documentação relevante de tal fundo e deve ser lida na íntegra.) Quaisquer investimentos ou empresas de portfólio mencionados, referidos ou descritos não são representativos de todos os investimentos em veículos administrados pela a16z, e não pode haver garantia de que os investimentos serão rentáveis ​​ou que outros investimentos realizados no futuro terão características ou resultados semelhantes. Uma lista de investimentos feitos por fundos administrados por Andreessen Horowitz (excluindo investimentos para os quais o emissor não deu permissão para a a16z divulgar publicamente, bem como investimentos não anunciados em ativos digitais negociados publicamente) está disponível em https://a16z.com/investments /.

Os gráficos e gráficos fornecidos são apenas para fins informativos e não devem ser considerados ao tomar qualquer decisão de investimento. O desempenho passado não é indicativo de resultados futuros. O conteúdo fala apenas a partir da data indicada. Quaisquer projeções, estimativas, previsões, metas, perspectivas e/ou opiniões expressas nestes materiais estão sujeitas a alterações sem aviso prévio e podem diferir ou ser contrárias às opiniões expressas por outros. Consulte https://a16z.com/disclosures para obter informações adicionais importantes.

Carimbo de hora:

Mais de Andreessen Horowitz